天天看點

Fleck For Web Socket

效果圖

Fleck For Web Socket

(前沿).WebSocket是一種基于TCP/IP通訊一種新的通訊協定,它實作了伺服器和用戶端雙工通訊,允許伺服器主動發送給用戶端.

(浏覽器對Socket的支援) .

  • 浏覽器 支援情況 Chrome谷歌浏覽器 Chrome version 4+支援
  • Firefox火狐浏覽器 Firefox version 5+支援
  • IE微軟浏覽器 IE version 10+支援(我們一般win7自帶的是IE11)
  • Safari蘋果浏覽器 IOS 5+支援
  • Android Brower安卓浏覽器 Android 4.5+支援

伺服器對Socket的支援

  • 廠商 應用伺服器 備注 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+支援   Jetty Jetty 7.0+支援 

 cs

using Fleck;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace socketDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //用戶端url以及其對應的Socket對象字典
            IDictionary<string, IWebSocketConnection> dic_Sockets = new Dictionary<string, IWebSocketConnection>();
            //建立

            WebSocketServer server = new WebSocketServer("ws://0.0.0.0:30000");//監聽所有的的位址
            //出錯後進行重新開機
            server.RestartAfterListenError = true;

            //開始監聽
            server.Start(socket =>
            {
                socket.OnOpen = () =>   //連接配接建立事件
                {
                    //擷取用戶端網頁的url
                    string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;
                    dic_Sockets.Add(clientUrl, socket);
                    Console.WriteLine(DateTime.Now.ToString() + "|伺服器:和用戶端網頁:" + clientUrl + " 建立WebSock連接配接!");
                };
                socket.OnClose = () =>  //連接配接關閉事件
                {
                    string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;
                    //如果存在這個用戶端,那麼對這個socket進行移除
                    if (dic_Sockets.ContainsKey(clientUrl))
                    {
                        //注:Fleck中有釋放
                        //關閉對象連接配接 
                        //if (dic_Sockets[clientUrl] != null)
                        //{
                        //dic_Sockets[clientUrl].Close();
                        //}
                        dic_Sockets.Remove(clientUrl);
                    }
                    Console.WriteLine(DateTime.Now.ToString() + "|伺服器:和用戶端網頁:" + clientUrl + " 斷開WebSock連接配接!");
                };
                socket.OnMessage = message =>  //接受用戶端網頁消息事件
                {
                    string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;
                    Console.WriteLine(DateTime.Now.ToString() + "|伺服器:【收到】來用戶端網頁:" + clientUrl + "的資訊:\n" + message);
                };
            });

            Console.ReadKey();
            foreach (var item in dic_Sockets.Values)
            {
                if (item.IsAvailable == true)
                {
                    item.Send("伺服器消息:" + DateTime.Now.ToString());
                }
            }
            Console.ReadKey();

            //關閉與用戶端的所有的連接配接
            foreach (var item in dic_Sockets.Values)
            {
                if (item != null)
                {
                    item.Close();
                }
            }

            Console.ReadKey();
        }
    }
}      

html:

<!DOCTYPE html>
 
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title>WebSocket測試</title>
    <style>
        .div1
        {
            height:88px;   
            width:173px;
            border:1px solid blue;
            margin:auto;
        }
        h4
        {
            margin:auto;
        }
    </style>
  <script>
   var webSocket = {};
        //建立websockt
        function CreateWebSocket() {
            webSocket = new WebSocket("ws://127.0.0.1:30000");
            webSocket.onopen = WebSokectOnOpen;
            webSocket.onmessage = WebSocketOnMessage;
            webSocket.onclose = WebSocketOnClose;
        };
 
        //建立連接配接事件
        function WebSokectOnOpen() {
            alert("已經打開連接配接!");
            webSocket.Send("WebSocketCreate Success!");
        };
 
        //監聽事件
        function WebSocketOnMessage(event) {
            //監聽來自用戶端的資料
            alert(event.data);
        };
 
        function WebSocketOnClose() {
            //監聽來自用戶端的資料
            alert('和伺服器斷開連接配接');
        };
 
        //發送事件
        function WebSocketSendMsg() {
            //擷取text中的值
            var text = document.getElementById("Text1").value;
            //發送到伺服器
            webSocket.send(text);
        }
  </script>
</head>
<body onload="CreateWebSocket()">
    <div class="div1">
        <input type="text" id="Text1" />
        <input type="button" onclick="WebSocketSendMsg()" value="發送資料" />
    </div>
</body>
</html>