哪个操作应该是套接字,哪个应该是http?

时间:2016-03-16 01:48:33

标签: node.js websocket socket.io messaging

我正在制作聊天应用。我有像sendMessage这样的操作:

sending_client_socket -> server_socket -> receiving_client_socket

这显然非常快,但是当我需要保留消息数据时呢?我最初应该使用http帖子吗?

http_post -> http_server -> emitting_server_socket -> receiving_client_socket

由于标题等原因,我担心这会很慢。

我的另一个选择似乎是:

sending_client_socket -> server_socket -> receiving_client_socket -> database operations) -> receiving_client_socket

但是我对这种方法存在安全问题,因为我无法验证发送邮件的人(因为我使用的是jwts)。

常见方法是什么?

1 个答案:

答案 0 :(得分:1)

  

哪些操作应该是套接字,哪些应该是http?

没有特别的偏好。使用webSocket或socket.io连接可以很好地满足持久化数据的要求。无论数据是如何发送的(无论是通过webSocket还是通过http post)都无关紧要。您的服务器可以实现代码,以便在数据到达时以任何方式执行任何操作。

因此,选择出于其他原因最有意义的传输,然后只需将代码置于该传输之后即可保留数据。

如果由于其他原因你已经有一个经过身份验证的socket.io连接,那么只需通过你想要保留的连接发送数据就完全没错了。

如果您没有可靠的方法来验证socket.io的另一个端点,那么在您已经拥有相应身份验证代码的HTTP帖子中使用它更简单,更简单或更实用那么你也可以这样做。由于所有socket.io连接都以HTTP连接开始,并且在socket.io中内置了身份验证方案,因此您也可以将身份验证方案移至socket.io。实施起来更加实用将是一个不错的选择。

  

常见方法是什么?

当然,HTTP请求比通过socket.io发送的消息更常见,但HTTP更常见于其他原因,这些原因与您的特定情况无关。有关在socket.io上或通过Ajax支持给定请求的一般性讨论,您可以看到另一个答案:Ajax vs Socket.io