Nodejs socket.io 广播消息要怎么广播,主要是指和 FLASH那些客户端的通信的广播

Nodejs socket.io 广播消息要怎么广播,主要是指和 FLASH那些客户端的通信的广播

io.sockets.on(‘connection’,function(client){ client.broadcast.send({message: client.sessionId + ‘is now available’});

client.on('message', function(msg) { client.broadcast({ message: client.sessionId + ': ' + msg.message }); });

client.on('disconnect', function() { client.broadcast({ message: client.sessionId + ' is no longer available'}); });

});

我上面这种广告好像不行 我把 client.broadcast 变为 client.broadcast.emit(); 好像也还是不行 我前端是这样接收的 socket.on(‘message’, function(message){ } 接收不到广播

哪位兄长,有没有nodejs和客户端通信的文档或者DEMO,非websocket哦


7 回复

要使用 Node.js 和 Socket.IO 进行广播消息,并且确保 Flash 客户端能够接收到这些消息,我们需要确保后端(Node.js)和前端(Flash 或其他客户端)都能正确处理消息的发送和接收。以下是一个简单的示例来演示如何实现这一点。

后端(Node.js)

首先,确保你已经安装了 socket.io 包:

npm install socket.io

然后,创建一个基本的服务器脚本来处理连接、消息和断开连接事件,并进行广播:

const io = require('socket.io')(3000);

io.on('connection', function(socket) {
    console.log('A user connected:', socket.id);

    // 广播消息给所有连接的客户端(除了发送消息的客户端)
    socket.broadcast.emit('message', { message: 'User ' + socket.id + ' has joined the chat' });

    socket.on('chat message', function(msg) {
        console.log('Message received:', msg);
        // 将消息广播给所有连接的客户端
        io.emit('message', { message: 'User ' + socket.id + ': ' + msg });
    });

    socket.on('disconnect', function() {
        console.log('User disconnected:', socket.id);
        // 当用户断开连接时,广播消息
        io.emit('message', { message: 'User ' + socket.id + ' has left the chat' });
    });
});

前端(Flash 或其他客户端)

假设你有一个 Flash 客户端或其他支持 WebSocket 的客户端。你需要一个库来处理 WebSocket 连接。例如,你可以使用 as3-websocket 库来处理 Flash 中的 WebSocket 连接。

以下是一个简单的 HTML/JavaScript 客户端示例:

<!DOCTYPE html>
<html>
<head>
    <title>Socket.IO Chat</title>
</head>
<body>
    <ul id="messages"></ul>
    <input id="m" autocomplete="off" /><button>Send</button>

    <script src="/socket.io/socket.io.js"></script>
    <script>
        var socket = io();
        document.getElementsByTagName('button')[0].addEventListener('click', function() {
            var msg = document.getElementById('m').value;
            socket.emit('chat message', msg);
            document.getElementById('m').value = '';
        });

        socket.on('message', function(data) {
            var item = document.createElement('li');
            item.textContent = data.message;
            document.getElementById('messages').appendChild(item);
        });
    </script>
</body>
</html>

解释

  1. 后端

    • 使用 io.on('connection', ...) 监听新的连接。
    • 使用 socket.broadcast.emit() 广播消息给除当前客户端外的所有客户端。
    • 处理 disconnect 事件以通知其他客户端某个用户已离开。
  2. 前端

    • 使用 socket.io-client 连接到服务器。
    • 发送和接收消息,并在页面上显示。

这样,你的 Node.js 服务器可以与 Flash 客户端和其他 WebSocket 客户端进行有效的通信。


socket.broadcast.emit() 这个是向自己以外其他客户端发送消息的样子,

Broadcasting means sending a message to everyone else except for the socket that starts it.

Github 页面上提到了的: https://github.com/learnboost/socket.io

汗. 差点以为没全局发的, 上面链接里找到了

io.sockets.emit('this', { will: 'be received by everyone' });

https://github.com/learnboost/socket.io#sending-and-receiving-events

发现自己发的广播自己收不到,如何确定广播已经发送成功呢?

如果对群组发广播该用什么方案?

根据你的描述,你希望使用Socket.IO在Node.js中实现广播功能,并且能够与Flash客户端进行通信。Socket.IO本身支持WebSocket、AJAX长轮询、WebSockets等传输方式,因此理论上可以与多种客户端通信。

下面是一个简单的示例代码,展示如何使用Socket.IO实现广播功能:

服务器端代码 (Node.js)

const io = require('socket.io')(3000);

io.on('connection', function(socket) {
    console.log("New client connected");

    // 广播消息给所有客户端(除了发送消息的客户端)
    socket.broadcast.emit('message', { message: "A new client has joined." });

    socket.on('message', function(msg) {
        console.log("Message received:", msg);
        io.emit('message', { message: "Server: " + msg.message });
    });

    socket.on('disconnect', function() {
        console.log("Client disconnected");
        io.emit('message', { message: "A client has left." });
    });
});

客户端代码 (JavaScript, 包括Flash中的AS3)

假设Flash客户端使用AS3编写,以下是一个简单的AS3示例来连接到Socket.IO服务器并处理消息。

AS3 示例代码

var socket:XMLSocket = new XMLSocket();
socket.connect("127.0.0.1", 3000);

// 接收消息
socket.addEventListener(Event.COMPLETE, onMessage);

function onMessage(event:Event):void {
    trace("Received:", event.target.data);
}

// 发送消息
function sendMessage(msg:String):void {
    socket.send("message:" + msg);
}

说明

  • 在服务器端,io.sockets.on('connection')监听新的连接事件。
  • 使用socket.broadcast.emit()方法将消息广播给所有连接的客户端(不包括自己)。
  • 使用io.emit()方法将消息广播给所有连接的客户端(包括自己)。
  • 在客户端,使用socket.on('message', callback)方法监听消息。

确保在客户端正确地处理来自服务器的消息。如果有任何问题,请检查网络连接、端口设置或客户端代码逻辑是否正确。

回到顶部