主要是两个文件,一个是后端文件,一个是前端文件:

后端文件:有人登录了,就通知所有的正在访问的页面,把总人数+1;反之-1;

前端文件:有人登录了,通知后端,页面关闭了,通知后端,同时接收后端派发来的消息;

首先,我们来写后端文件-app.js:

var express = require('express');
var app = require('express')();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
app.use('/', express.static(__dirname+'/'));
var users = [];
console.log('服务器运行于:localhost:3004');
io.on('connection', function(socket){
console.log('a user connected'); socket.on('login',function(data){ socket.username = data.username;
users.push(data.username);
// 统计连接数
socket.emit('users',{number:users.length}); // 发送给自己
socket.broadcast.emit('users',{number:users.length}); // 发送给其他人 });
socket.on('logout',function(data){ socket.username = data.username;
users=users.slice(0,users.length-1);
console.log()
统计连接数
socket.emit('users',{number:users.length}); // 发送给自己
socket.broadcast.emit('users',{number:users.length}); // 发送给其他人 });
});
//开启端口监听socket
server.listen(3004);

然后,前端html:

   <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Socket.IO Example</title>
</head>
<body>
<h1>Socket.IO及时通讯</h1>
<p id="count"></p> <span class="logoutBtn">退出</sapn> <script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://cdn.bootcss.com/socket.io/2.2.0/socket.io.js"></script>
<script> //建立连接
socket = io.connect('http://你的服务器地址:3004'); socket.emit("login", {username:'defaultName'}); //接收服务端推送的信息
socket.on("users", function(obj) {
//var curContent = contentNode.html();
//contentNode.html(curContent+obj.msg);
console.log('当前在线:'+obj.number)
}); $('.logoutBtn').click(function(){
socket.emit("logout", {username:'defaultName'});
}); </script> </body>
</html>

后端文件写好后,要发布到我们自己的服务器上运行才会生效,

后端文件要用到express和socket.io,所以我再创建一个package.json文件:

{
"name": "socketServer",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
"express": "~4.16.0"
},
"devDependencies": {
"socket.io": "^2.2.0"
}
}

如图,app.js和package.json在一个叫socketServer文件夹中,通过ftp传到服务器:

在服务器命令行进入socketServer目录下,运行npm install命令,安装好依赖,安装好后就多了一个node_modules文件:

最后,我们运行我们的app.js:

一般我们都是通过npm start启动应用,其实就是调用node ./var/www/socketServer。

换成pm2就是:pm2 start ./var/www/socketServer

如果一切顺利的话,我们的在线人数统计就完成了。

如果你有使用pm2的话,使用:pm2 logs命令就可以在控制台上查看打印信息了

创建一个socket服务实时统计在线人数的更多相关文章

  1. 使用PHP创建一个socket服务端

    与常规web开发不同,使用socket开发可以摆脱http的限制.可自定义协议,使用长连接.PHP代码常驻内存等.学习资料来源于workerman官方视频与文档. 通常创建一个socket服务包括这几 ...

  2. [Swift通天遁地]四、网络和线程-(14)创建一个Socket服务端

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  3. [Swift通天遁地]四、网络和线程-(13)创建一个Socket客户端

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  4. C# 创建一个WCF服务

    做代码统计,方便以后使用: app.config配置文件设置: <configuration> <system.serviceModel> <bindings> & ...

  5. 为MongoDB创建一个Windows服务

    一:选型,根据机器的操作系统类型来选择合适的版本,使用下面的命令行查询机器的操作系统版本 wmic os get osarchitecture 二:下载并安装 附上下载链接 点击安装包,我这里是把文件 ...

  6. 【LINUX】——linux如何使用Python创建一个web服务

    问:linux如何使用Python创建一个web服务? 答:一句话,Python! 一句代码: /usr/local/bin/python -m SimpleHTTPServer 8686 > ...

  7. 第一个socket服务端程序

    第一个socket服务端程序 #include <stdio.h> #include <stdlib.h> #include <string.h> #include ...

  8. ng 通过factory方法来创建一个心跳服务

    <!DOCTYPE html> <html ng-app="myApp"> <head lang="en"> <met ...

  9. 使用PHP来简单的创建一个RPC服务

    RPC全称为Remote Procedure Call,翻译过来为"远程过程调用".主要应用于不同的系统之间的远程通信和相互调用. 比如有两个系统,一个是PHP写的,一个是JAVA ...

随机推荐

  1. CSS:层叠样式表—position

    CSS position属性用于指定一个元素在文档中的定位方式.top,right,bottom和left属性则决定了该元素的最终位置. 常见语法 static | relative | absolu ...

  2. position定位笔记

    position定位 position一共有四个可选属性:static/relative/absolute/fixed 代码: <style type="text/css"& ...

  3. Dynamic Ambient Occlusion and Indirect Lighting

    This sample was presented on the Nvida witesite, which detail a new idea to calculate the ambient oc ...

  4. CSS、JavaScript学习过程

    初学JavaScript,通过博客记录自己学习过程中遇到的问题.(包含少量CSS) 零碎记录 JavaScript 输出 type="text/javascript" 那些老旧的实 ...

  5. Spring的入门学习笔记 (注解)

    Spring的bean管理(注解) 注解 1.代码里面特殊标记(ep:@Test),使用注解完成一些相关功能 2.注解写法 @注解名称(属性名称=属性值) 3.可以用在类,方法,属性上都可以 4.Sp ...

  6. morphia 框架 mongodb内嵌查询

    mongodb中存储的文档格式如下,实现查询fromdata下did和dvid为指定值的数据 { "_id": { "$oid": "553f4a9f ...

  7. Linux性能检查命令总结[转]

    一些常用的网络.IO.内存监控指令,Linux性能检查命令总结

  8. linux 网络服务之一

  9. 浅析BFC布局的概念以及作用

    BFC的概念以及作用 BFC的定义: (Block formatting context)直译为"块级格式化上下文".它是一个独立的渲染区域,只有Block-level box参与 ...

  10. python学习第一天 -----2019年4月15日

    第一周-第06章节-Python3.5-第一个python程序 #!/usr/bin/env python #-*- coding:utf-8 _*- """ @auth ...