【问题标题】:Getting a specific client from WebSocketCollection从 WebSocketCollection 获取特定客户端
【发布时间】:2013-07-30 19:28:49
【问题描述】:

我正在编写一个 websocket 处理程序,它应该从一个客户端向另一个客户端发送消息。

代码

public class SocketHandler : WebSocketHandler
{
    private static WebSocketCollection clients = new WebSocketCollection();

    private int id;

    public override void OnOpen()
    {
        this.id = Convert.ToInt32(Cypher.Decrypt(this.WebSocketContext.QueryString["id"]));
        clients.Add(this);         
    }

    public override void OnMessage(string message)
    {
        //sending code here
    }
}

我知道我是否需要向所有连接的客户端发送消息,我只需要这样做:

clients.Broadcast("message");

...但是我需要发送到特定的客户端,并从查询字符串中分配特定的Id - 比如说1156

如何从客户端集合中获取带有id=1156 的客户端?

我尝试使用 lambda 表达式,但它不起作用。应该很简单...我之前在 LINQ 中做过类似的事情,但此时我完全迷失了。

【问题讨论】:

  • 您对 linq 语句做了什么尝试?
  • @RowlandShaw 喜欢 clients.SingleOrDefault(x => x.id == id); 但这里 x.id 不可用
  • 在这一行... this.id = Convert.ToInt32(Cypher.Decrypt(this.WebSocketContext.QueryString["id"]));解密没有解决。有人可以告诉我它在哪个名称空间中,因为它没有出现在 NEO4j 中。谢谢
  • @JudsonTerrell 这是我自己的班级Cypher 的一个功能。你不需要使用Cypher.Decrypt
  • 其实你是对的。下面发布的答案很好用。即:clients.SingleOrDefault(r => ((SocketHandler)r).id == 1156).Send("Hey 1156!");

标签: c# asp.net websocket


【解决方案1】:

我终于设法在客户中搜索特定客户并将消息专门发送给他。

clients.SingleOrDefault(r => ((SocketHandler)r).id == 1156).Send("Hey 1156!");

您只需要执行typecast,然后通常的查询就可以正常工作了。

【讨论】:

    猜你喜欢
    • 2014-10-20
    • 2013-11-02
    • 2017-05-28
    • 2018-08-17
    • 2011-12-13
    • 2021-11-24
    • 2014-10-06
    • 2016-01-16
    • 1970-01-01
    相关资源
    最近更新 更多