Lok*_*oki 0 sockets node.js express socket.io
伙计们,我正在尝试使用 net.Socket 包制作简单的 TCP 服务器,我正在使用express 框架。我试图实现的行为是当用户输入特定路由将数据发送到所有连接的客户端时,现在没有人可以实现这一点吗?
这是我的示例代码:
const express = require('express');
const app = express();
const cors = require('cors');
const bodyParser = require('body-parser');
const net = require('net');
const PORT = 5000;
let connection;
const server = net.createServer((socket) => {
console.log('CONNECTED: ' + socket.remoteAddress +':'+ socket.remotePort);
connection = socket;
});
app.use(cors());
app.use(bodyParser.json());
app.get('/', (request, response) => {
response.send('VMS server');
});
app.post('/contact', (req, res) => {
const data = { hello: 'hello' }
connection.write(data);
res.send({ data: 'data emmited' })
});
app.listen(PORT, () => {
console.log(`Server running at: http://localhost:${PORT}/`);
});
server.listen(1337, function() {
console.log("Listening on 1337");
});
Run Code Online (Sandbox Code Playgroud)
我这里遇到的问题是数据被多次发出,因为我将当前套接字分配给连接变量。
有没有其他方法可以做到这一点,我可以使用服务器变量以某种方式发送给所有连接的客户端吗?
好的,设法解决了。以下是我如何解决这个问题的步骤 - 创建一个客户端数组,当客户端连接到服务器时,在断开连接时将该套接字推送到客户端数组,从数组中删除该项目...为了向所有客户端发送数据,我创建了一个广播方法,我在其中循环客户端数组,并调用每个套接字的发出方法并发送数据。
这是示例代码:
const express = require('express');
const app = express();
const cors = require('cors');
const bodyParser = require('body-parser');
const net = require('net');
const PORT = 5000;
let sockets = []; // array of sockets
// emmit data to all connected clients
const broadcast = (msg) => {
//Loop through the active clients object
sockets.forEach((client) => {
client.write(msg);
});
};
const server = net.createServer((socket) => {
console.log('CONNECTED: ' + socket.remoteAddress +':'+ socket.remotePort);
sockets.push(socket);
socket.on('end', () => {
console.log('DISCONNECTED: ');
// remove the client for list
let index = sockets.indexOf(socket);
if (index !== -1) {
console.log(sockets.length);
sockets.splice(index, 1);
console.log(sockets.length);
}
});
});
app.use(cors());
app.use(bodyParser.json());
app.get('/', (request, response) => {
response.send('VMS server');
});
app.post('/contact', (req, res) => {
const data = { hello: 'hello' }
broadcast(data); //emit data to all clients
res.send({ data: 'data emmited' })
});
app.listen(PORT, () => {
console.log(`Server running at: http://localhost:${PORT}/`);
});
server.listen(1337, function() {
console.log("Listening on 1337");
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1714 次 |
最近记录: |