在连接时发送 Websocket 参数但不发送查询字符串
Posted
技术标签:
【中文标题】在连接时发送 Websocket 参数但不发送查询字符串【英文标题】:Send Websocket param on connect but not query string 【发布时间】:2018-06-06 14:39:38 【问题描述】:我正在使用Microsoft.Web.WebSockets
,如下所示,我如何在连接时指定正在连接的用户而不在查询字符串中设置他的 ID,我在服务器中有一个属性项,但在客户端我找不到任何东西像这样。
这是我的服务器:
using System.Linq;
using Microsoft.Web.WebSockets;
namespace TestSocket
public class TestWebSocketHandler : WebSocketHandler
private static WebSocketCollection clients = new WebSocketCollection();
private string name;
public override void OnOpen()
this.name = this.WebSocketContext.QueryString["name"];
var a = this.WebSocketContext.Items["test"];
var all = clients.Where(n => ((TestWebSocketHandler)n).name == this.name);
if (all.Count() > 0)
clients.Remove((TestWebSocketHandler)all.ToList()[0]);
clients.Add(this);
public override void OnMessage(string message)
// WebSocketPacket webso = JsonConvert.DeserializeObject<WebSocketPacket>(message);
// WebSocketPacket response = new WebSocketPacket();
var channel = clients.FirstOrDefault(n => ((TestWebSocketHandler)n).name == message);
if (channel != null)
channel.Send("test 123");
public override void OnClose()
clients.Remove(this);
这是我的客户:
var ws = new WebSocket("ws://localhost:30455//ws.ashx");
ws.Connect();
ws.Send("BALUS");
以及如何加密服务器和客户端之间发送的数据?
【问题讨论】:
【参考方案1】:如何在连接时指定正在连接的用户而不在查询字符串中设置他的 ID
WebSocket 连接握手是使用 HTTP GET
请求执行的。在GET
请求中,只有两种方法可以将自定义数据传递到 HTTP 服务器 - 通过 URL 查询字符串和通过自定义 HTTP 标头。大多数 WebSocket 客户端库不允许您在 WebSocket 握手期间指定自定义 HTTP 标头,因此只留下 URL 查询字符串(如果您正在编写自己的 HTTP 客户端,那么您可以发送任何您想要的 HTTP 标头)。
如何加密服务器和客户端之间发送的数据?
使用wss://
而不是ws://
【讨论】:
好的交易,我怎样才能以没有任何拥有链接的人可以连接的方式验证连接? @User7291 TLS 和证书对此很有用。 WSS 是基于 TLS 的 WebSocket。或者,由于 WebSocket 握手是通过 HTTP/S 执行的,因此也可以使用 HTTP 身份验证。 你能给我提供一个客户端/服务器的例子吗? 你的意思是在cookie中设置授权?以上是关于在连接时发送 Websocket 参数但不发送查询字符串的主要内容,如果未能解决你的问题,请参考以下文章