Nodejs socket.io 的問題

Nodejs socket.io 的問題

我想問 socket.io 的問題 我如何從 Nodejs 中 ,外面的代碼傳送到 io.sockets.on 內 ??

例如 :

app.get(’/abc’, function(req,res){

這兒發出一個指令到 io.sockets.on 內

})

io.sockets.on(‘connection’, function (socket) {

這兒接收到上面的指令

})


4 回复

当然可以!socket.io 是一个实时通信库,用于在客户端和服务器之间建立双向通信通道。你的问题是如何从外部的路由处理函数中向 io.sockets.on('connection') 内部发送数据。

以下是一个示例代码,展示了如何实现这一点:

示例代码

服务器端(server.js

const express = require('express');
const http = require('http');
const socketIo = require('socket.io');

// 创建 Express 应用程序
const app = express();

// 创建 HTTP 服务器
const server = http.createServer(app);

// 将服务器与 Socket.IO 集成
const io = socketIo(server);

// 路由处理函数
app.get('/abc', function(req, res) {
    // 在这里发出一个指令到 io.sockets.on('connection')
    io.emit('message', 'Hello from /abc route'); // 发送消息给所有连接的客户端
    res.send('Request sent to sockets');
});

// 监听连接事件
io.sockets.on('connection', function(socket) {
    console.log('A user connected');

    // 接收来自客户端的消息
    socket.on('client-message', function(data) {
        console.log('Message from client:', data);
        socket.emit('server-response', 'Received your message');
    });

    // 接收服务器端发出的消息
    socket.on('message', function(data) {
        console.log('Message received:', data);
        socket.emit('response', 'Server received your message');
    });
});

// 启动服务器
server.listen(3000, () => {
    console.log('Server is running on port 3000');
});

解释

  1. 创建 Express 和 Socket.IO 实例

    • 我们首先创建了一个 Express 应用程序和一个 HTTP 服务器。
    • 然后,我们将 Socket.IO 集成到这个 HTTP 服务器上。
  2. 路由处理函数

    • 当用户访问 /abc 路径时,服务器会调用 app.get('/abc', ...) 函数。
    • 在这个函数内部,我们使用 io.emit('message', 'Hello from /abc route') 向所有已连接的客户端发送一条消息。
  3. 监听连接事件

    • 当有新的客户端连接时,io.sockets.on('connection', ...) 会被触发。
    • 在这个回调函数内部,我们可以监听客户端发送的消息,并作出响应。
  4. 发送和接收消息

    • 服务器可以通过 io.emitsocket.emit 发送消息。
    • 客户端可以通过 socket.on 监听这些消息并作出响应。

通过这种方式,你可以在任何地方(例如路由处理函数)向已连接的客户端发送消息。希望这能帮助你解决问题!


看你的意思好像是当请求/abc的时候触发connection,那简单的方法就是在/abc这个页面从客户端connect一次

我不是在客戶端做事 , 像天氣報告 , 要在server 不斷開一個 function做 。。。

function myCallback(err, result){

    doSomething(result)
    這兒發出一個指令到 io.sockets.on 內 

}

io.sockets.on(‘connection’, function (socket) {

這兒接收到上面的指令
socket.on('senddata', function() { 
			io.sockets.emit('chat', '123' )
	})

})

要在Node.js中使用socket.io从外部代码向io.sockets.on内部发送消息,你可以通过Socket.IO的广播或直接发送机制来实现。以下是如何实现的一个简单示例。

示例代码

首先,确保你的项目中已经安装了socket.io库。如果还没有安装,可以通过npm安装它:

npm install socket.io

然后,你可以创建一个简单的服务器,如下所示:

const express = require('express');
const http = require('http');
const socketIo = require('socket.io');

// 创建Express应用
const app = express();

// 创建HTTP服务器
const server = http.createServer(app);

// 将Socket.IO绑定到HTTP服务器
const io = socketIo(server);

// 当一个新的WebSocket连接建立时触发
io.on('connection', (socket) => {
    console.log('A user connected');

    // 在这里接收消息
    socket.on('my-message', (data) => {
        console.log('Message received:', data);
    });

    // 当用户断开连接时
    socket.on('disconnect', () => {
        console.log('User disconnected');
    });
});

// 处理GET请求
app.get('/abc', (req, res) => {
    // 向所有连接的客户端广播消息
    io.emit('my-message', { message: 'Hello from /abc route' });

    // 或者向特定的客户端发送消息
    // io.to(socketId).emit('my-message', { message: 'Hello to specific client' });

    res.send('Message sent to all clients');
});

// 监听端口
server.listen(3000, () => {
    console.log('Server is running on port 3000');
});

解释

  1. 服务器设置:

    • 使用express创建一个Web服务器。
    • 使用http模块创建一个HTTP服务器。
    • 使用socket.io将WebSocket功能添加到HTTP服务器上。
  2. 处理连接:

    • 当新的WebSocket连接建立时,服务器会监听并打印一条消息。
    • 服务器还会监听名为my-message的消息,并打印接收到的数据。
  3. 处理GET请求:

    • /abc路由中,当用户访问此路由时,服务器会广播一条消息给所有已连接的客户端。
    • 你也可以选择向特定客户端发送消息,只需使用io.to(socketId).emit()
  4. 运行服务器:

    • 服务器在3000端口上监听请求。

这样,你就能够在Node.js中使用Socket.IO从外部代码(如HTTP路由)向WebSocket连接内部发送消息了。

回到顶部