相关疑难解决方法(0)

WebSocket和普通套接字通信有什么区别?

根据维基百科,HTTP和WebSocket之间的唯一关系是以a形式的额外握手Upgrade HTTP request.之后,似乎浏览器和HTTP服务器将通过普通套接字在旧的C/S范例中进行通信.

所以我的问题是:

  • WebSocket只是一个普通的套接字通信吗?
  • 它被称为WebSocket,因为通信目标服务器的80端口?即port 80只是同义词web.
  • 80端口在服务器端,客户端使用哪些端口?
  • 如果它就像浏览器和服务器之间的普通套接字通信一样,为什么直到最近才在浏览器中实现WebSocket呢?它似乎只是对B/S范例的一点C/S扩展.

ADD 1(9:46 AM 5/23/2017)

今天,我重温了@ jfriend00的优秀答案.让我们总结一下我的理解.

  • Socket只是一个端到端的通信通道.它不会对可以在其上使用的通信协议施加限制.
  • 像HTTP一样,webSocket只是另一种独立的通信协议.虽然名字中的单词socket一开始让我很困惑.
  • 如果我们可以通过HTTP进行通信,webSocket利用与HTTP相同的端口号,我们可以确保可以进行webSocket通信.因为频道通过,我们可以选择最合适的方式来沟通.

sockets websocket web

26
推荐指数
2
解决办法
1万
查看次数

为什么WebSocket可以在"握手后"与HTTP共享80端口?

我认为:

  • 端口指定服务器上的程序.
  • 当我们说to share a port,它实际上意味着to have the requests processed by the same program listening on that port.

WebSocket握手resemblesHTTP格式,因此can处理HTTP协议的服务器程序可以理解.所以发送握手请求是可以的port 80.

但是after the handshake,WebSocket数据格式与HTTP格式完全不同,它怎么还能发送到端口80?如下面的URL:

ws://somehost:80/chat

它是如何运作的?

我猜:

HTTP程序是否在端口80上看到传入的请求cannot be handled as HTTP,然后它将它传递给WebSocket程序来处理它.如果是这样,如果有一些其他协议想要共享端口80,比如WebSocket2,如果没有办法识别正在使用的协议,那么HTTP程序如何知道要传递哪个协议.

添加1

根据jfriend00回复,我绘制了下图:

因此,同一浏览器中的WebSocket和HTTP流量实际上是通过different套接字连接实现的.虽然他们都开始连接到服务器的端口80.

我认为如果WebSocket这个词中没有包含套接字,那么将它更容易理解为TCP协议上的另一个应用程序级协议.

在此输入图像描述

添加2

我根据jfriend00进一步的评论将上面的图表改进了下面.我想要展示的是WebSocket如何与coexist浏览器中的同一服务器进行通信和HTTP通信.

在此输入图像描述

添加3

读完这个帖子之后,我回想一下,当服务器接受连接时,服务器端口不会改变:当服务器接受TCP连接时,端口是否会改变?

所以图表应该是这样的:

HTTP的TCP连接和WebSocket的TCP连接应该使用不同的client ports.

在此输入图像描述

html5 http websocket

4
推荐指数
1
解决办法
4005
查看次数

socket.io如何工作

我想知道socket.io方法如何用于发出某个事件,我已经读过它不像长轮询方法,而是一个可以在所有不同浏览器上工作的不同方法...客户端如何保持 - 没有长轮询请求与服务器联系?

我是node.js的新手,我想为eventdriven服务器实现我自己的系统(是的......重新发明轮子!)因为我想用手触摸这个如此简单的"socket.io - emit ()" 方法.

谢谢你的帮助!

event-driven node.js socket.io

4
推荐指数
1
解决办法
2091
查看次数

websocket实现内部使用http协议吗?

为了建立WebSocket连接,客户端发送WebSocket握手请求,服务器为此返回WebSocket握手响应,如下例所示.[30]

客户端请求(就像在HTTP中一样,每行以\ r \n结尾,并且末尾必须有一个额外的空行):

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com
Run Code Online (Sandbox Code Playgroud)

服务器响应:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat
Run Code Online (Sandbox Code Playgroud)

我无法理解.要初始化连接,将发送HTTP GET请求.但是,如果我不托管HTTP服务器但我只托管WebSocket服务器怎么办?那么它如何处理HTTP请求呢?

sockets websocket

3
推荐指数
2
解决办法
3922
查看次数

标签 统计

websocket ×3

sockets ×2

event-driven ×1

html5 ×1

http ×1

node.js ×1

socket.io ×1

web ×1