【问题标题】:Switching to websocket from simple Berkeley socket从简单的 Berkeley socket 切换到 websocket
【发布时间】:2020-05-04 07:54:53
【问题描述】:

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

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

现在我想要实现的是让Simple-WebSocket-Server 也在这个端口 X 上监听。

这当然不可能,我知道。

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

交出套接字的 fd 以及我的套接字在注意到 websocket 请求之前读取的第一个字节会有什么好处。

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

【问题讨论】:

    标签: sockets websocket


    【解决方案1】:

    这里的棘手之处在于 Simple-WebSocket-Server 有自己的accept,所以我没有办法将fd 和“第一个字节”数组一起交给它。

    我能想到的一些方法:

    • 修改 Simple-WebSocket-Server,使其不会关闭非 WS 客户端或超时,而是调用您的库

    • 改为使用 websocketpp 之类的东西来创建自己的 websocket 服务器,然后在两个服务器之间进行选择(我为自己的一个项目做了类似的事情,我必须从第一个项目中检测套接字协议byte 然后选择合适的协议处理程序wampcc protcol selector)

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

    【讨论】:

    • 我更喜欢我的基本伯克利套接字可以是“主”的方法,所以方法 3 可以,但我也不想给图片带来比实际需要更多的开销.
    猜你喜欢
    • 2017-05-13
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 2017-01-25
    相关资源
    最近更新 更多