Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用节点js和套接字io处理响应_Javascript_Node.js_Websocket_Dom Events - Fatal编程技术网

Javascript 使用节点js和套接字io处理响应

Javascript 使用节点js和套接字io处理响应,javascript,node.js,websocket,dom-events,Javascript,Node.js,Websocket,Dom Events,我有一个场景,其中web页面最初由HTTP提供服务。单击submit按钮后,它将向服务器发送一些数据,并执行一些web服务,这将花费很长时间。我需要快速显示响应页面,在web服务作业完成后,必须在先前加载的相同页面中显示结果 这可以通过http处理程序处理所有请求,然后通过套接字io传递结果来实现 我希望写一些类似的代码 var httpd = require('http').createServer(handler); var io = require('socket.io').listen(

我有一个场景,其中web页面最初由HTTP提供服务。单击submit按钮后,它将向服务器发送一些数据,并执行一些web服务,这将花费很长时间。我需要快速显示响应页面,在web服务作业完成后,必须在先前加载的相同页面中显示结果

这可以通过http处理程序处理所有请求,然后通过套接字io传递结果来实现

我希望写一些类似的代码

var httpd = require('http').createServer(handler);
var io = require('socket.io').listen(httpd);
var fs = require('fs');
httpd.listen(4000);
function handler(req, res) {
    fs.readFile(__dirname + '/index.html',
        function(err, data) {
            if (err) {
                res.writeHead(500);
                return res.end('Error loading index.html');
            }
            res.writeHead(200);

            res.end(data);
        }
        );

}
io.sockets.on('connection', function (socket) {
    socket.on('clientMessage', function(content) {
       setTimeout(function () {
           socket.emit('serverMessage', "web service complete");
       }, 5000);


    });
});

对。只要看一个例子就知道如何使用它。

是的。只要看一个例子就知道如何使用它。

我找到了解决问题的方法,所以我把这个作为我自己问题的答案。我参考了socket.io聊天应用程序,它很有用,但没有完整的文档。对于某些函数,我们需要浏览源代码。 我使用了一个会话来识别套接字和http请求以及每个客户机。我将粘贴我找到的代码将工作

 var io = require('socket.io');
    var express = require('express');
    var http = require('http');
    var fs = require('fs');
    var connect = require('connect');
    var cookie = require("cookie");
    var app = express();
    var server = http.createServer(app)
    var parseCookie = connect.utils.parseCookie;
    var parseSignedCookie = connect.utils.parseSignedCookie;
    var MemoryStore = connect.session.MemoryStore; 
    var sessionStore = new MemoryStore();


    app.configure(function () {
        app.use(express.bodyParser());
        app.use(express.cookieParser('somesuperspecialsecrethere'));
        app.use(express.session({
            key: 'express.sid',
            store: sessionStore
        }));

    });

    app.get('/', function(req, res){
        fs.readFile(__dirname + '/index.html',
            function(err, data) {
                if (err) {
                    res.writeHead(500);
                    return res.end('Error loading index.html');
                }

                res.writeHead(200);
                res.end(data);
                console.log("SessionID from http: "+req.sessionID);

    setTimeout(function () { //this is for simulating a time taking task
               var sock_id = io.sockets.sockets[req.sessionID];

            io.sockets.sockets[sock_id].emit("getmessage","my mmmmmmmmmmmmmessssssage");

        }, 5000);

            });
    });


    GLOBAL.sio = io.listen(server);
    server.listen(3000);

    sio.sockets.on('connection', function (socket) {

        var hs = socket.handshake;

        socket.on('clientMessage', function(data) {
        console.log("Message from client: "+ data.message);

        io.sockets.sockets[hs.sessionID] = socket.id;
      });

    });

    sio.set('authorization', function (data, accept) {
        if (!data.headers.cookie) {
            return accept('Session cookie required.', false);
        }

        data.cookie = cookie.parse(data.headers.cookie);

        data.cookie = parseSignedCookie(data.cookie['express.sid'], 'somesuperspecialsecrethere');

        data.sessionID = data.cookie;

        console.log('Session Id from socket: ' + data.sessionID);

        sessionStore.get(data.sessionID, function(err, session){
            if (err) {
                return accept('Error in session store.', false);
            } else if (!session) {
                return accept('Session not found.', false);
            }
            // success! we're authenticated with a known session.
            data.session = session;
            return accept(null, true);
        });



        <html>
            <head>
                <title>express WebSocket chat</title>
                <script src="http://10.3.0.52:3000/socket.io/socket.io.js"></script>
                <script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js'></script>

            </head>
            <body>

                <script src="http://10.3.0.52:3000/socket.io/socket.io.js"></script>
                <script type="text/javascript">


                    var sio = io.connect('http://10.3.0.52:3000');

                    sio.socket.on('error', function (reason){
                        console.error('Unable to connect Socket.IO', reason);
                    });

                    sio.on('connect', function (){
                        console.info('successfully established a working connection ');
                    });

 sio.on('getmessage', function(data) {
        console.log(data);

        });
                </script>

                <input type="text" name="message" id="message">
                <input type="button" name="send" id="send" value="Send">
            </body>
        </html>
var io=require('socket.io');
var express=需要(“express”);
var http=require('http');
var fs=需要('fs');
var connect=require('connect');
var cookie=要求(“cookie”);
var-app=express();
var server=http.createServer(应用程序)
var parseCookie=connect.utils.parseCookie;
var parseSignedCookie=connect.utils.parseSignedCookie;
var MemoryStore=connect.session.MemoryStore;
var sessionStore=newmemorystore();
app.configure(函数(){
app.use(express.bodyParser());
app.use(express.cookieParser('somesuperspecialsecrethere');
应用程序使用(express.session)({
键:“express.sid”,
商店:sessionStore
}));
});
app.get('/',函数(req,res){
fs.readFile(uu dirname+'/index.html',,
功能(错误、数据){
如果(错误){
书面记录(500);
返回res.end('Error loading index.html');
}
书面记录(200);
res.end(数据);
log(“来自http的SessionID:+req.SessionID”);
setTimeout(函数(){//用于模拟耗时任务
var sock_id=io.sockets.sockets[req.sessionID];
io.sockets.sockets[sock_id].emit(“getmessage”、“my mmmmmmm EsssMessage”);
}, 5000);
});
});
GLOBAL.sio=io.listen(服务器);
听(3000);
sio.sockets.on('连接',功能(插座){
var hs=套接字。握手;
socket.on('clientMessage',函数(数据){
日志(“来自客户端的消息:+data.Message”);
io.sockets.sockets[hs.sessionID]=socket.id;
});
});
sio.set(“授权”,功能(数据,接受){
if(!data.headers.cookie){
return accept('需要会话cookie',false);
}
data.cookie=cookie.parse(data.headers.cookie);
data.cookie=parseSignedCookie(data.cookie['express.sid'],'somesuperspecialsecrethere');
data.sessionID=data.cookie;
log('来自套接字的会话Id:'+data.sessionID);
获取(data.sessionID,函数(err,session){
如果(错误){
返回accept('会话存储中有错误',false);
}else if(!会话){
返回accept('找不到会话',false);
}
//成功!我们已通过已知会话的身份验证。
data.session=会话;
返回接受(null,true);
});
快速网络聊天
var sio=io.connect('http://10.3.0.52:3000');
sio.socket.on('error',函数(原因){
console.error('无法连接Socket.IO',原因);
});
sio.on('connect',函数(){
console.info('成功建立了工作连接');
});
sio.on('getmessage',函数(数据){
控制台日志(数据);
});

我找到了问题的解决方案,因此我将此作为我自己问题的答案。我参考了socket.io聊天应用程序,它很有用,但没有完整的文档。对于某些功能,我们需要查看源代码。 我使用了一个会话来识别套接字和http请求以及每个客户端。我将粘贴我找到的代码

 var io = require('socket.io');
    var express = require('express');
    var http = require('http');
    var fs = require('fs');
    var connect = require('connect');
    var cookie = require("cookie");
    var app = express();
    var server = http.createServer(app)
    var parseCookie = connect.utils.parseCookie;
    var parseSignedCookie = connect.utils.parseSignedCookie;
    var MemoryStore = connect.session.MemoryStore; 
    var sessionStore = new MemoryStore();


    app.configure(function () {
        app.use(express.bodyParser());
        app.use(express.cookieParser('somesuperspecialsecrethere'));
        app.use(express.session({
            key: 'express.sid',
            store: sessionStore
        }));

    });

    app.get('/', function(req, res){
        fs.readFile(__dirname + '/index.html',
            function(err, data) {
                if (err) {
                    res.writeHead(500);
                    return res.end('Error loading index.html');
                }

                res.writeHead(200);
                res.end(data);
                console.log("SessionID from http: "+req.sessionID);

    setTimeout(function () { //this is for simulating a time taking task
               var sock_id = io.sockets.sockets[req.sessionID];

            io.sockets.sockets[sock_id].emit("getmessage","my mmmmmmmmmmmmmessssssage");

        }, 5000);

            });
    });


    GLOBAL.sio = io.listen(server);
    server.listen(3000);

    sio.sockets.on('connection', function (socket) {

        var hs = socket.handshake;

        socket.on('clientMessage', function(data) {
        console.log("Message from client: "+ data.message);

        io.sockets.sockets[hs.sessionID] = socket.id;
      });

    });

    sio.set('authorization', function (data, accept) {
        if (!data.headers.cookie) {
            return accept('Session cookie required.', false);
        }

        data.cookie = cookie.parse(data.headers.cookie);

        data.cookie = parseSignedCookie(data.cookie['express.sid'], 'somesuperspecialsecrethere');

        data.sessionID = data.cookie;

        console.log('Session Id from socket: ' + data.sessionID);

        sessionStore.get(data.sessionID, function(err, session){
            if (err) {
                return accept('Error in session store.', false);
            } else if (!session) {
                return accept('Session not found.', false);
            }
            // success! we're authenticated with a known session.
            data.session = session;
            return accept(null, true);
        });



        <html>
            <head>
                <title>express WebSocket chat</title>
                <script src="http://10.3.0.52:3000/socket.io/socket.io.js"></script>
                <script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js'></script>

            </head>
            <body>

                <script src="http://10.3.0.52:3000/socket.io/socket.io.js"></script>
                <script type="text/javascript">


                    var sio = io.connect('http://10.3.0.52:3000');

                    sio.socket.on('error', function (reason){
                        console.error('Unable to connect Socket.IO', reason);
                    });

                    sio.on('connect', function (){
                        console.info('successfully established a working connection ');
                    });

 sio.on('getmessage', function(data) {
        console.log(data);

        });
                </script>

                <input type="text" name="message" id="message">
                <input type="button" name="send" id="send" value="Send">
            </body>
        </html>
var io=require('socket.io');
var express=需要(“express”);
var http=require('http');
var fs=需要('fs');
var connect=require('connect');
var cookie=要求(“cookie”);
var-app=express();
var server=http.createServer(应用程序)
var parseCookie=connect.utils.parseCookie;
var parseSignedCookie=connect.utils.parseSignedCookie;
var MemoryStore=connect.session.MemoryStore;
var sessionStore=newmemorystore();
app.configure(函数(){
app.use(express.bodyParser());
app.use(express.cookieParser('somesuperspecialsecrethere');
应用程序使用(express.session)({
键:“express.sid”,
商店:sessionStore
}));
});
app.get('/',函数(req,res){
fs.readFile(uu dirname+'/index.html',,
功能(错误、数据){
如果(错误){
书面记录(500);
返回res.end('Error loading index.html');
}
书面记录(200);
res.end(数据);
log(“来自http的SessionID:+req.SessionID”);
setTimeout(函数(){//用于模拟耗时任务
var sock_id=io.sockets.sockets[req.sessionID];
io.sockets.sockets[sock_id].emit(“getm