Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 从简单Berkeley套接字切换到websocket_Sockets_Websocket - Fatal编程技术网

Sockets 从简单Berkeley套接字切换到websocket

Sockets 从简单Berkeley套接字切换到websocket,sockets,websocket,Sockets,Websocket,我有一个简单的套接字实现,它使用标准的低级(绑定、侦听、接受、读取等) 这个套接字监听一个端口,比如X 现在我要做的是在这个端口X上监听 当然,这在本质上是不可能的-我知道。 我的意图是:在我的简单套接字实现中,我会检测连接的客户机(接受后)是我的客户机还是websocket客户机,然后如果我发现该客户机是websocket客户机,我会将整件事传递到此库中,使其行为与接受该客户机的客户机相同 在注意到websocket请求之前,最好将套接字的fd以及套接字读取的第一个字节一起移交 我有点执着于这

我有一个简单的套接字实现,它使用标准的低级(绑定、侦听、接受、读取等)

这个套接字监听一个端口,比如X

现在我要做的是在这个端口X上监听

当然,这在本质上是不可能的-我知道。

我的意图是:在我的简单套接字实现中,我会检测连接的客户机(接受后)是我的客户机还是websocket客户机,然后如果我发现该客户机是websocket客户机,我会将整件事传递到此库中,使其行为与接受该客户机的客户机相同

在注意到websocket请求之前,最好将套接字的fd以及套接字读取的第一个字节一起移交


我有点执着于这样做是最好的,但我不想肯定地重新实现整个websocket的东西。

这里的棘手问题是,简单的websocket服务器自己接受
,所以我没有办法将
fd
与一个“第一个字节”数组结合起来

我可以想到一些方法:

  • 修改简单的WebSocket服务器,使其不关闭非WS客户机或超时,而是调用您的库

  • 取而代之的是创建自己的websocket服务器,然后在两个服务器之间进行选择(我在自己的一个项目中做了类似的事情,我必须从第一个字节检测套接字协议,然后选择适当的协议处理程序)

  • 或者,您可以尝试让简单的WebSocket服务器在不同的端口Y上侦听;您还可以在X上侦听,如果在X上检测到web套接字客户端,您可以在内部创建一对内部队列,然后打开到
    localhost:Y
    的连接,并继续在这对套接字之间传输字节;这样,您就不需要修改简单的WebSocket服务器代码


我希望我的基本Berkeley套接字可以是“主套接字”的方法,因此方法3也可以,但我也希望不会带来比实际需要更多的开销。