Shr*_*low 17 html sockets node.js
TLDR; 如何在基于事件的编程模型中识别套接字.
我刚刚开始使用node.js,过去我在C++和PHP套接字()中完成了大部分编码工作,所以node.js对我来说是一个非常新的东西.
在c ++中识别套接字,我们可以做一些事情,比如写一个主套接字,说服务器来监听新的连接和更改,然后相应地处理这些连接.
Tim*_*ade 19
如果您正在寻找实际的套接字而不是socket.io,它们确实存在.
但如上所述,Node.js和Javascript使用基于事件的编程模型,因此您创建一个(TCP)套接字,侦听IP:端口(类似于绑定),然后接受传递表示连接的Javascript对象的连接事件.
从这里你可以得到FD或另一个标识符,但是这个对象也是一个长期存在的对象,你可以根据需要存储一个标识符(这就是socket.io所做的).
var server = net.createServer();
server.on('connection', function(conn) {
conn.id = Math.floor(Math.random() * 1000);
conn.on('data', function(data) {
conn.write('ID: '+conn.id);
});
});
server.listen(3000);
Run Code Online (Sandbox Code Playgroud)
ecd*_*per 12
蒂莫西的方法很好,唯一要提到的是 - Math.random()可能导致id的重复.因此它产生相同随机数的几率非常小,但它可能会发生.所以我建议你使用dylang的模块 - shortid:
var shortid = require('shortid');
var server = net.createServer();
server.on('connection', function(conn) {
conn.id = shortid.generate();
conn.on('data', function(data) {
conn.write('ID: '+conn.id);
});
});
server.listen(3000);
Run Code Online (Sandbox Code Playgroud)
因此,在这种情况下,您可以确保不会发生ID重复.
在打字稿中:
import { v4 as uuidv4 } from 'uuid';
import net from 'net';
class Socket extends net.Socket {
id?: string;
}
const server = net.createServer();
server.on('connection', (conn) => {
conn.id = uuidv4();
conn.on('data', (data) => {
console.log(conn.id);
});
});
server.listen(3000);
Run Code Online (Sandbox Code Playgroud)
你需要id
先添加;