Sockets 套接字和websocket之间的区别?

Sockets 套接字和websocket之间的区别?,sockets,websocket,mod-wsgi,Sockets,Websocket,Mod Wsgi,我正在构建需要使用套接字连接与另一个应用程序通信的web应用程序。这对我来说是一个新的领域,所以我想确定的是,它们不同于。看起来他们只是在概念上相似 询问,因为最初我计划使用Django作为我的项目的基础,但是在我上面链接的SO帖子中,很清楚的是WebSooCts不可能(或者至少不可靠,甚至使用Django WebSoCube之类的东西)使用优选的Django安装(Apache和MODIWSGI)。然而,我还发现了其他一些帖子,它们随意地导入Python的socket模块,以实现像这样简单的功能

我正在构建需要使用套接字连接与另一个应用程序通信的web应用程序。这对我来说是一个新的领域,所以我想确定的是,它们不同于。看起来他们只是在概念上相似

询问,因为最初我计划使用Django作为我的项目的基础,但是在我上面链接的SO帖子中,很清楚的是WebSooCts不可能(或者至少不可靠,甚至使用Django WebSoCube之类的东西)使用优选的Django安装(Apache和MODIWSGI)。然而,我还发现了其他一些帖子,它们随意地导入Python的socket模块,以实现像这样简单的功能

因此:

  • 他们真的不同吗
  • 对于依赖于与外部服务器建立套接字连接的项目,是否有任何理由不使用Django
    回答您的问题

  • 尽管他们(通常)取得了相似的成就,是的,但他们确实是不同的。WebSocket通常通过浏览器运行,浏览器通过类似于通过TCP/IP运行的HTTP协议连接到应用服务器。因此,它们主要用于需要与服务器永久连接的Web应用程序。另一方面,普通套接字更强大、更通用。它们运行在TCP/IP上,但不限于浏览器或HTTP协议。它们可以用于实现任何类型的通信
  • 不,没有理由

  • 您必须使用WebSocket(或类似的协议模块,如Flash插件所支持的),因为普通浏览器应用程序根本无法打开纯TCP套接字

    可用于的模块可以提供很多帮助,但请注意,它本身并不是一个纯粹的WebSocket模块

    它实际上是一个更通用的通信模块,可以运行在各种其他网络协议之上,包括WebSocket和Flash Socket

    因此,如果要在服务器端使用
    Socket.IO
    ,还必须使用其客户机代码和对象。您无法轻松地将原始的
    WebSocket
    连接到
    socket.io
    服务器,因为您必须模拟它们的消息协议。

    关于您的问题(b),请注意WebSocket规范尚未最终确定。根据报告:

    实现者应该知道这个规范是不稳定的


    就我个人而言,我认为WebSocket是目前无法使用的最先进的工具。虽然我可能会在一年左右的时间里发现它们很有用。

    WebSocket在其实现中使用套接字。WebSocket基于一个标准协议(现在是final call,但还不是final),该协议定义了连接“握手”和消息“帧”。双方通过握手过程相互接受连接,然后使用标准消息格式(“帧”)来回传递消息


    我正在开发一个框架,它允许您使用已安装的软件直接进行机器间的通信。这可能符合你的目的。如果您愿意,可以访问我的博客:

    WebSocket只是TCP协议上的另一个应用程序级协议,就像HTTP一样

    下面引用了一些片段,希望能帮助您更好地理解WebSocket

    在最简单的形式中,WebSocket就是一个通信通道 在两个应用程序之间(不一定使用浏览器 涉及)…WebSocket通信可用于任何类型的 应用程序,但WebSocket最常用的用途是 服务器应用程序和基于浏览器的应用程序之间的通信


    WebSocket是一种计算机通信传输协议(如TCP、HTTP 1.0、HTTP 1.1、HTTP 2.0、QUIC、WebRTC等)

    套接字是一个端点,用于通过网络发送和接收数据(如端口号)

    插座示例:

    (TCP, 8.8.8.4, 8080, 8.8.8.8, 8070)
    
    其中:

    (protocol, local address, local port, remote address, remote port)
    

    WebSocket与HTTP不同。它们是具有一些帧和HTTP兼容握手的普通套接字。HTTP兼容的握手只是为了允许WebSocket连接在运行webserver的同一端口上(这样webserver就可以转发它们),但是一旦建立了连接,webserver就不在循环中。WebSocket不限于浏览器客户端。查看同时具有非浏览器客户端和服务器的客户端。确定。我懂了。。。由于我无法删除此已接受的答案,我恳请您使用正确的信息对其进行编辑。谢谢您可以构建websocket客户端并在浏览器之外使用它们。websocket协议是HTTP 1.1,升级后连接到“websocket”。@huggie nope。有一点框架:(2个字节表示小消息)。@NiCkNewman实际上这可能是一个很好的单独问题。帧开销最小,不是问题所在。用于MMO网络的WebSockets有两个问题:它只是客户端服务器,是TCP(基于流的)。为了获得良好的MMO网络性能,您还需要直接的点对点网络和数据报(一致的低延迟比接收每个数据包更重要)。好消息是WebRTC DataChannel拥有这两个属性,因此它将开始填补这一空白,并允许在浏览器中进行完整的AAA MMO游戏。那么,9年后的现在呢?很确定它们现在已经普遍使用了。许多网站都有由WebSocket支持的实时或实时更新功能,尽管各种网站都提供了“回退到轮询”功能,以防服务器支持缺失。奇怪的是,为什么一个普通的浏览器应用程序不能简单地打开一个纯TCP套接字呢?这是因为javascript不支持它吗?@AdamHughes是的,差不多。我想大多数安全人员都会对网络浏览器开放任意TCP连接到互联网上陌生地方的想法感到愤怒。