websocket fleck demo

前言

fleck 比较简洁,想看下他的源码的,先感受一下demo吧。

正文

先上代码。

static  IDictionary  dic_Sockets = new Dictionary();
public   static void  startwebsocket()
	{
		//客户端url以及其对应的Socket对象字典
		//创建
	  WebSocketServer server = new WebSocketServer("wss://172.18.13.202:30000");//监听所有的的地址
	   server.Certificate = new X509Certificate2(@"D:\ssl\www\cert.pfx", "214867098930248");
		 //出错后进行重启
	   server.RestartAfterListenError = true;
	server.SupportedSubProtocols = new[] { "superchat", "chat" };
	  //开始监听
	  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);
			};
		});

		//关闭与客户端的所有的连接
		//foreach (var item in dic_Sockets.Values)
		//{
		//    if (item != null)
		//{
		//        item.Close();
		//    }
		//}

		//Console.ReadKey();
	}
public static void send(string key)
{

	 //string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;

	var socket = dic_Sockets[key];
	if (socket.IsAvailable == true)
		{
			socket.Send("服务器消息:" + DateTime.Now.ToString());
		}
	}
}

我遇到的问题

问题1:
我们可能遇到这个:

server.Certificate = new X509Certificate2(@"D:\ssl\www\cert.pfx", "214867098930248");

对于这个来说,我们需要去摆在信息,一个是X509Certificate2的第一个参数,一个是和第二个参数,第一个是我们的证书,第二个是我们的证书密码,是的,如果不正确的话,可能本地可以访问但是到了服务器的外面客户访问的时候是不可以的,因为证书不匹配,或者说由于开启了权限,但是我们的

用户是不会去为我们做这些操作的。

第二个我使用的是iis,需要配置一个。

iis 找到部署的站点应用连接池,右键高级设置,找到“加载用户配置文件”改为true。window service2008 默认为false的。

这样就解决了找不到文件路径的问题了。

前端代码

 



    
    WebSocket测试
    
    


    

CSDN博客

By:LoveMiw

你可能感兴趣的:(websocket fleck demo)