首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >斑点WebSockets

斑点WebSockets
EN

Stack Overflow用户
提问于 2012-02-05 22:48:44
回答 4查看 12.2K关注 0票数 4

我想在我的WebSocket项目中使用Fleck,服务器端看起来非常简单,但是如何区分打开的连接。有什么身份证明吗?我能想到的唯一方法是在OnOpen事件中创建GUID并将其传递回客户端。有没有更聪明的解决方案?

基本服务器设置:

代码语言:javascript
复制
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));
};

例如,我如何创建一个聊天室,以便除发送消息之外的所有连接都能收到消息。

Fleck服务器:https://github.com/statianzo/Fleck

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-29 23:10:39

Fleck现在为每个连接的客户端在WebSocketConnectionInfo上创建一个Guid Id。在多个连接使用相同IP的情况下,这将有所帮助。请参阅此处的相关提交:

https://github.com/statianzo/Fleck/commit/fc037f49362bb41a2bc753a5ff51cc9da40ad824

票数 6
EN

Stack Overflow用户

发布于 2012-02-07 12:14:19

向用户询问用户名,并将用户名附加到套接字地址:

代码语言:javascript
复制
var wsimpl = window.WebSocket || window.mozWebSocket;
window.ws = new wsimpl('http://localhost:8080/myApp_' + userName, myProtocol);

然后在用socket.WebSocketConnectionInfo.path打开套接字后,在服务端剥离userName。还有一个也可以使用的clientip属性。我正在做这件事,它工作得很好。

票数 2
EN

Stack Overflow用户

发布于 2012-03-08 10:21:16

我开始做一些类似于你问我正在做的事情。在我的例子中,我使用ConnectionInfo.Path来区分我的套接字所做的事情。

您可以从ConnectionInfo中获得大量信息

socket.ConnectionInfo.{Host|Path|Origin|SubProtocol|ClientIPAddress|Cookies}

因此,为了回答您的问题,将其提供给除发送者之外的所有人,您可以根据ConnectionInfo区分每个套接字(如果适用,您还可以根据此信息创建一个UID )

作为一个非常基本的例子:

如果你知道每个客户端都会有一个不同的IP,那么下面这样就行了:

代码语言:javascript
复制
 socket.OnMessage = message =>
 {
     foreach (IWebSocketConnection socketConnection in allSockets.Where(socketConnection => socket.ConnectionInfo.ClientIpAddress != socketConnection.ConnectionInfo.ClientIpAddress))
     {
         socketConnection.Send("Echo: " + message);
     }
 };
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9150137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档