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

后端文件:有人登录了,就通知所有的正在访问的页面,把总人数+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. VS进行调试时IIS Express显示Access Define-坑爹的腾讯TGP助手

    今天在家使用VS进行调试的时候发现IIS Express死活启动不了,改用IIS也是不行,尝试了网上所说的所有办法,改了各种权限,找了各种注册表,最终未果,然后我想起之前被腾讯坑过的那次:http:/ ...

  2. C# 泛型的协变和逆变 (转载)

    1. 可变性的类型:协变性和逆变性 可变性是以一种类型安全的方式,将一个对象当做另一个对象来使用.如果不能将一个类型替换为另一个类型,那么这个类型就称之为:不变量. 协变和逆变是两个相互对立的概念: ...

  3. DQL-分组查询

    一.语法   select 分组函数,分组后的字段   from 表 [ where 筛选条件]   group by 分组的字段[having 分组后的筛选][order by 排序列表] 例如 S ...

  4. 20181029noip模拟赛T1

    1.借书 [问题描述] Dilhao一共有n本教科书,每本教科书都有一个难度值,他每次出题的时候都会从其中挑两本教科书作为借鉴,如果这两本书的难度相差越大,Dilhao出的题就会越复杂,也就是说,一道 ...

  5. linux系统基础之--进程计划(基于centos7.4 1708)

  6. LinkedList的源码分析(基于jdk1.8)

    1.初始化 public LinkedList() { } 并未开辟任何类似于数组一样的存储空间,那么链表是如何存储元素的呢? 2.Node类型 存储到链表中的元素会被封装为一个Node类型的结点.并 ...

  7. Spark运行模式_基于YARN的Resource Manager的Client模式(集群)

    现在越来越多的场景,都是Spark跑在Hadoop集群中,所以为了做到资源能够均衡调度,会使用YARN来做为Spark的Cluster Manager,来为Spark的应用程序分配资源. 在执行Spa ...

  8. Python学习 :集合

    集合 Set 集合的创建 集合的创建只有一种方式 集合中的元素必须是不可变的数据类型 集合是无序的,可以通过 for 循环来遍历或者迭代器进行筛选 s=set('xiaoming') s1=['ale ...

  9. flask(列表数据接口设计)

    新闻列表数据只是当前页面的一部分 点击分类时需要去获取当前分类下的新闻数据 并在展示的时候需要更新新闻列表界面,不需要整体页面刷新 所以新闻数据也使用 ajax 的方式去请求后台接口进行获取 接口设计 ...

  10. 论文翻译第二弹--用python(或Markdown)对论文复制文本进行处理

    图中这种论文你想进行文本复制放入翻译软件进行翻译时,会发现是这种形式: 句子之间是断开的,这时普遍的方法,也是我之前一直用的方法就是打开一个文档编辑器,复制上去后一行行地继续调整.昨天不想这样了,就打 ...