C#版Websocket實例

C#版Websocket實例

 

Demo地址:www.awbeci.xyzjavascript

websocket有java、nodejs、python,Php等等版本,我使用的是C#版本,服務器端是Fleck,github地址:https://github.com/statianzo/Fleckhtml

這篇博客就是引用上面的一個例子教你如何使用客戶端和服務器端來使用websocket的,對於英文還不錯的同窗,直接看上面 的源代碼就能夠了,下面開始講解如何使用:java

在說以前咱們先來看看哪些瀏覽器支持websocket:node

WebSocket客戶端支持
瀏覽器 支持狀況
Chrome Chrome version 4+支持
Firefox Firefox version 5+支持
IE IE version 10+支持
Safari IOS 5+支持
Android Brower Android 4.5+支持
WebSocket 服務端支持
廠商 應用服務器 備註
IBM WebSphere WebSphere 8.0 以上版本支持,7.X 以前版本結合 MQTT 支持相似的 HTTP 長鏈接
甲骨文 WebLogic WebLogic 12c 支持,11g 及 10g 版本經過 HTTP Publish 支持相似的 HTTP 長鏈接
微軟 IIS IIS 7.0+支持
Apache Tomcat Tomcat 7.0.5+支持,7.0.2X 及 7.0.3X 經過自定義 API 支持
  Jetty Jetty 7.0+支持

 

如今咱們看看瀏覽器端如何實現:python

複製代碼
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title>websocket client</title>
    <script type="text/javascript">
        var start = function () {
            var inc = document.getElementById('incomming');
            var wsImpl = window.WebSocket || window.MozWebSocket;
            var form = document.getElementById('sendForm');
            var input = document.getElementById('sendText');

            inc.innerHTML += "connecting to server ..<br/>";

            // create a new websocket and connect
            window.ws = new wsImpl('ws://localhost:7181/');

            // when data is comming from the server, this metod is called
            ws.onmessage = function (evt) {
                inc.innerHTML += evt.data + '<br/>';
            };

            // when the connection is established, this method is called
            ws.onopen = function () {
                inc.innerHTML += '.. connection open<br/>';
            };

            // when the connection is closed, this method is called
            ws.onclose = function () {
                inc.innerHTML += '.. connection closed<br/>';
            }

            form.addEventListener('submit', function (e) {
                e.preventDefault();
                var val = input.value;
                ws.send(val);
                input.value = "";
            });

        }
        window.onload = start;
    </script>
</head>
<body>
    <form id="sendForm">
        <input id="sendText" placeholder="Text to send" />
    </form>
    <pre id="incomming"></pre>
</body>
</html>
複製代碼

服務器端我使用的是C#的控制檯程序:git

複製代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Fleck;

namespace TopoWebSocket
{
    class Program
    {
        static void Main(string[] args)
        {
            FleckLog.Level = LogLevel.Debug;
            var allSockets = new List<IWebSocketConnection>();
            var server = new WebSocketServer("ws://0.0.0.0:7181");
            server.Start(socket =>
            {
                socket.OnOpen = () =>
                {
                    Console.WriteLine("Open!");
                    allSockets.Add(socket);
                };
                socket.OnClose = () =>
                {
                    Console.WriteLine("Close!");
                    allSockets.Remove(socket);
                };
                socket.OnMessage = message =>
                {
                    Console.WriteLine(message);
                    allSockets.ToList().ForEach(s => s.Send("Echo: " + message));
                };
            });


            var input = Console.ReadLine();
            while (input != "exit")
            {
                foreach (var socket in allSockets.ToList())
                {
                    socket.Send(input);
                }
                input = Console.ReadLine();
            }
        }
    }
}
複製代碼

注意要引用:using Fleck;這個在上面的連接裏面已經提供了。代碼都寫好後,咱們來運行下服務器端吧,客戶端也能夠,總之兩個都運行好:如圖:github

如今你能夠客戶端向服務器端發送消息了,咱們試試,輸入你好世界:web

而後咱們再在服務器端發送消息給瀏覽器試試,如,HelloWorld瀏覽器

也成功了,呵呵,是否是很神奇,如今能夠添加本身 的業務邏輯在裏面了,是否是 以爲先後臺通訊變得簡單了。服務器

總結:

一、這個例子不是我寫的,我只不過在github上拿過來給大家介紹,大家能夠經過上面的例子fork下源代碼,本身看看分析分析別人是怎麼用的

二、若是有問題能夠加羣問我:464696550

 三、參考資料:http://www.ibm.com/developerworks/cn/java/j-lo-WebSocket/

相關文章
相關標籤/搜索