node.js - 使用 NodeJS 的简单 WebSocket 应用程序

标签 node.js websocket socket.io

我要制作一个简单的 WebSocket 应用程序等待客户端连接。客户将是 Android 用户,应用程序本身是两个人的简单聊天。因此,对于 Android 应用程序,我需要知道 WebSocket 地址(以 ws://wss:// 开头)。我已经有一些网站,我在其中安装了 nodejs。但几天后,我完全搞不懂发生了什么以及如何让事情发挥作用。我什至会很高兴看到 nodejs 捕获任何 WebSocket 消息,仅此而已。

我阅读了一些关于 nodejs 和 socket.io 的手册,但我还是不知道从哪里获得 ws://地址并使其以某种方式工作。

例如,来自socket.io chat manual ,我们有:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res){
  res.sendfile('index.html');
});

io.on('connection', function(socket){
  console.log('a user connected');
});

http.listen(3000, function(){
  console.log('listening on *:3000');
});

这已经是简单的 websocket 应用程序了吗?在那种情况下,我想要的 ws://地址在哪里?也许我应该只在我的服务器上上传那一堆代码并将查询发送到 ws://mydomain.com:3000

最佳答案

如果您在服务器上使用 socket.io 库,那么您也必须在客户端使用 socket.io 兼容库,因为它是一个webSocket 之上的协议(protocol),因此两端必须使用相同的语言。

webSockets(在这种情况下是 socket.io)是为了共享你的网络服务器而构建的。因此,任何对您服务器的 webSocket 连接请求都将发送到与您的网络服务器相同的主机和端口。

每个 webSocket 请求都以一个 http 请求开始(因此它由您的网络服务器处理)并且该 http 请求作为其中的 header 请求升级到 webSocket 协议(protocol)。当您的 Web 服务器看到该自定义 header 时,它会将控制权传递给 socket.io 库,该库然后响应升级到 webSocket 协议(protocol)是正常的,并且开始作为 http 请求的套接字现在变成了套接字应用使用 webSocket/socket.io。

socket.io 库会自动处理插入您的网络服务器以查看这些协议(protocol)升级请求。

在网页中,连接到此的 socket.io 客户端代码如下所示:

<script src="/socket.io/socket.io.js"></script>
<script>

var socket = io();  
socket.on('connect', function() {
    // socket.io webSocket connection with your server is now established
});

</script>

socket.io 库将自动连接回网页所来自的同一主机。您甚至不需要输入 URL。

关于node.js - 使用 NodeJS 的简单 WebSocket 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30221370/

相关文章:

node.js - Docker NodeJS Puppeteer@2.0.0-如何修复无法启动Chrome!问题

node.js - 如何暂时在不同的端口运行 Node 应用程序?

java - 具有持久队列的服务器推送Java框架?

javascript - 在 Electron 应用程序中禁用键盘快捷键 Alt + Tab

javascript - Phonegap Cordova - 尝试连接到公共(public) IP 服务器

node.js - Node 服务器运行几天后,socket.io 变得缓慢且无响应

java - 如何创建嵌入式 WebSocket 服务器 Jetty 9?

node.js - 在 socket.io 中添加一个自定义属性,并在服务器中获取这个值

php - Laravel 5.7 - 广播 - socket.io - redis : Nothing happen on client

url - Node.js - 如何从 url 中删除端口?