完成ajax函数

时间:2018-05-03 10:56:19

标签: javascript jquery node.js socket.io

在我的应用程序中,客户端首先从nodejs服务器调用web服务,以从mongoDB数据库获取历史数据,以便绘制它(使用highcharts库)。然后我需要从服务器获取实时更新并将它们发送到客户端,为此,我想使用 socket.io

我正在使用AJAX函数来调用web服务,在完成之后,我正在尝试创建一个socket.io连接。但这不起作用。

以下是客户端端代码的一部分:

$(function(){

$.ajax({

url: 'http://localhost:3300/historicalData',
type: 'GET',
success : function(data) {
    //some code here
},
complete : function(){
var socket = io('http://localhost:3300');
    //after the connexion is established, i want to do some stuff here
}
});
});

以下是服务器端代码的一部分:

var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get("/historicalData", function(req, res){
  getData(res);
});

io.on('connection', function(socket){
  console.log('A new WebSocket connection has been established');
});

app.listen("3300", function(){
  console.log('Server up: http://localhost:3300');
});

我在这里做错了什么?

在我的应用程序中使用socket.io的正确方法是什么?

3 个答案:

答案 0 :(得分:0)

您可以使用complete: () => { const socket = io('http://localhost:3300'); socket.on('connect', socket => { // do things }); } 回调,如下所示......

// app.listen('3300');  // ordinary express app
http.listen('3300');    // socket server app

此外,当您需要使用套接字服务器时,您正在启动快速应用程序。通过以下更改

可以轻松解决此问题
{{1}}

Client API reference

答案 1 :(得分:0)

创建一个全局连接,以便您可以在代码中的任何位置使用套接字。

例如,

var socket = io('http://localhost:3300',{secure:true});
    $.ajax({
        url: 'http://localhost:3300/historicalData',
        type: 'GET',
        success : function(data) {
          console.log(data);
          socket.emit('emit_from_here');
        }
    });
    socket.on('server_response',(res)=>{
     console.log(res); 
    });

此外,在您的服务器端代码中,

var socket = require( 'socket.io' );
var app = require('express')();
var http = require('http');
var server = http.createServer(app);

var port = 3300;
server.listen(port,(res)=>{
  console.log('Server & Socket listening on port : '+port)
})

var io = socket.listen(server);
io.sockets.on('connection', function(socket){
  socket.on('emit_from_here',()=>{
    socket.emit('server_response','server response');
  })
})

app.get("/historicalData",(req,res)=>{
  res.send('works well');
})

希望这会有所帮助。

答案 2 :(得分:-1)

原来我必须使用:http.listen("3300") 而不是:app.listen("3300")

(我找到了解决方案,感谢这篇文章的答案https://stackoverflow.com/a/24811468/9638215