2017-08-02 88 views
1

我有一个应用程序接收来自程序的消息。该应用程序接收消息,并将消息广播给连接的客户端。现在我在控制台和控制台上显示消息,这个接收器应用程序正在完美接收。但是在客户端(html页面),它不会被广播。当我打开本地主机/结果时,不显示任何内容。我究竟做错了什么?node.js socket.io未广播到连接的客户端

var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 
var EventHubClient = require('azure-event-hubs').Client; 
var connectionString = 'connection string'; 

const bodyParser = require('body-parser') 

app.use(bodyParser.urlencoded({ extended: true })) 
app.use(bodyParser.json()) 

var printError = function (err) { 
    console.log(err.message); 
}; 

var result; 

var printMessage = function (message) { 
    console.log('Message received: '); 
    result = JSON.stringify(message.body); 
    obj = JSON.parse(result); 
    console.log('message:' + result) 

    console.log(''); 
}; 

count =0; 

app.get('/result', function(req, res){ 

    res.sendFile(__dirname + '/result.html'); 
}); 


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

    socket.on('chat message', function(msg){ 

    io.emit('chat message', result); 
    console.log("This is id in the sock' section" + check_id); 
    }); 
    socket.on('disconnect', function(){ 
    console.log('user disconnected'); 
     socket.removeAllListeners('disconnect'); 
     io.removeAllListeners('connection'); 
    }); 
}); 

var client = EventHubClient.fromConnectionString(connectionString); 
client.open() 
    .then(client.getPartitionIds.bind(client)) 
    .then(function (partitionIds) { 
     return partitionIds.map(function (partitionId) { 
      return client.createReceiver('$Default', partitionId, {  'startAfterTime' : Date.now()}).then(function(receiver) { 
       console.log('Created partition receiver: ' + partitionId) 
       receiver.on('errorReceived', printError); 
       receiver.on('message', printMessage); 
      }); 
     }); 
    }) 
    .catch(printError); 


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

result.html

<html> 
    <head><title>Hello world</title></head> 
    <script src="/socket.io/socket.io.js"></script> 
    <script> 
    var socket = io(); 
    // socket.emit('chat message') 


    socket.on('chat message',function(msg){ 

     socket.emit('chat message',msg); 
     document.write('hello world'); 
     document.write(msg); 
    }); 
    </script> 
</html> 
+0

您是否尝试过重新制作的示例? – EMX

+0

它工作得很好。但是,为什么我不明白,为什么它的工作正常,当按钮单击而不是文档加载触发发射? – Neo

+0

,因为onload你应该首先将套接字连接到服务器并设置客户端套接字事件处理程序。然后在'连接'的客户端内,你知道这个套接字已经连接上了,所以在这个事件中你可以开始发射。 – EMX

回答

1

我会直接从printMessage功能发送:

function printMessage(message) { 
result = JSON.stringify(message.body); 
console.log('[message]',result); 
io.sockets.emit('chat message',result); 
} 

,记得修改客户端(result.html),因此它不做一个无限循环:

<script> 
var socket=io(); 
socket.on('chat message',function(msg){ 
console.log(msg); //alert(msg); 
document.write(msg); 
}); 
</script> 

编辑:

你是如何包括socket.io.js脚本?

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

尝试与指定服务器地址socket.connect('localhost:3000');

I made this working example for you


重新编辑:I remade the working example for you, this time I added a client-server emission that bounces back to all connected clients

+0

不工作。 result.html不显示任何内容。 – Neo

+1

添加了一个工作示例[gist](https://gist.github.com/unknown0perator/50d6746cfddcb9c5c917b7baa6ae06b2) – EMX

+0

Thankyou的答案,但它似乎仍然不工作。当我做io.on('连接...)并打印一些东西时,它就可以工作。但是,当我这样做,socket.on('聊天消息...)它不起作用。 – Neo

相关问题