博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Node.js] Level 6. Socket.io
阅读量:4704 次
发布时间:2019-06-10

本文共 5152 字,大约阅读时间需要 17 分钟。

6.2 Setting Up socket.io Server-Side

So far we've created an Express server. Now we want to start building a real-time Q&A moderation service and we've decided to use socket.io.

Using the http module, create an new http server and pass the expressapp as the listener for that new server.

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

Using the socket.io module, listen for requests on the http server. Store the return object of this operation in a variable called io.

var io = require('socket.io')(server);

Use the object stored in io to listen for client 'connection' events. Remember, the callback function takes one argument, which is the client object that has connected.

When a new client connects, log a message using console.log().

io.on('connection', function(client){    console.log(client + "has connected.");});

Finally, we want to tell our http server to listen to requests on port 8080.

server.listen(8080);

 

Code:


var express = require('express');var app = express();var server = require('http').createServer(app);var io = require('socket.io')(server);io.on('connection', function(client){    console.log(client + "has connected.");});server.listen(8080);

 

6.3 Client socket.io Setup 

In our html file, load the socket.io.js script and connect to the socket.io server.

Load the socket.io.js script. The socket.io.js path you should use is'/socket.io/socket.io.js'. Express knows to serve the socket.io client js for this path.

Using the global io object that's now available for us, connect to the socket.io server at http://localhost:8080.

 

6.4 Listening For Questions

In our client below, listen for 'question' events from the server and call the insertQuestion function whenever the event fires.

First, listen for 'question' events from the server.

Now, have the event callback function call the insertQuestion function. TheinsertQuestion function is already created for you, and it's placed in its own file. It expects exactly one argument - the question.

server.on('question', function(data){      insertQuestion(data);  });

 

Code: 


 

6.5 Broadcasting Questions

When a question is submitted to our server, we want to broadcast it out to all the connected clients so they can have a chance to answer it.

In the server, listen for 'question' events from clients.

client.on('question', function(question){    });

Now, emit the 'question' event on all the other clients connected, passing them the question data.

client.broadcast.emit('question', question);

 

Code:


 

var express = require('express');var app = express();var server = require('http').createServer(app);var io = require('socket.io')(server);io.on('connection', function(client) {  console.log("Client connected...");    client.on('question', function(question){      client.emit('question', question);  });});server.listen(8080);

 

6.6 Saving Client Data

In our real-time Q&A app, we want to allow each client only one question at a time, but how do we enforce this rule? We can use socket.io's ability to save data on the client, so whenever a question is asked, we first want to check the question_asked value on the client.

First, when a client emits a 'question' event, we want to set the value ofquestion_asked to true.

Second, when a client emits a 'question' event, we want to broadcast that question to the other clients.

client.question_asked = true; client.broadcast.emit('question', question);

Finally, when a client emits a 'question' event, check to make surequestion_asked is not already set to true. We only want to allow one question per user, so make sure that we only set the value ofquestion_asked and broadcast the question to other clients when the value of question_asked is not already true.

var express = require('express');var app = express();var server = require('http').createServer(app);var io = require('socket.io')(server);io.on('connection', function(client) {  console.log("Client connected...");  client.on('question', function(question) {    if(!client.question_asked){      client.question_asked = true;       client.broadcast.emit('question', question);    }  });});server.listen(8080);

 

6.7 Answering Questions 

Clients can also answer each other's questions, so let's build that feature by first listening for the 'answer' event on the client, which will send us both the question and answer, which we want to broadcast out to the rest of the connected clients.

With the client, listen for the 'answer' event from clients.

client.on('answer', function(question, answer){    });

Now, emit the 'answer' event on all the other clients connected, passing them the question data.

// listen for answers here    client.on('answer', function(question, answer){            client.broadcast.emit('answer', question, answer);    });

 

6.8 Answering Question Client 

Now on the client, listen for the 'answer' event and then broadcast both the question and the answer to the connected clients.

Listen for the 'answer' event off of the server.

Call the answerQuestion function, passing in both the question and theanswer that was broadcast from the server.

 

转载于:https://www.cnblogs.com/Answer1215/p/4104513.html

你可能感兴趣的文章
PAT甲级题解-1123. Is It a Complete AVL Tree (30)-AVL树+满二叉树
查看>>
项目开发总结报告(GB8567——88)
查看>>
SSH加固
查看>>
端口扫描base
查看>>
iOS IM开发的一些开源、框架和教程等资料
查看>>
FansUnion:共同写博客计划终究还是“流产”了
查看>>
python 二维字典
查看>>
Arrays类学习笔记
查看>>
实验吧之【天下武功唯快不破】
查看>>
2019-3-25多线程的同步与互斥(互斥锁、条件变量、读写锁、自旋锁、信号量)...
查看>>
win7-64 mysql的安装
查看>>
dcm4chee 修改默认(0002,0013) ImplementationVersionName
查看>>
maven3在eclipse3.4.2中创建java web项目
查看>>
发布时间 sql语句
查看>>
黑马程序员 ExecuteReader执行查询
查看>>
记一些从数学和程序设计中体会到的思想
查看>>
题目1462:两船载物问题
查看>>
POJ 2378 Tree Cutting(树形DP,水)
查看>>
UVA 116 Unidirectional TSP (白书dp)
查看>>
第三方测速工具
查看>>