当前位置:网站首页>Socket. Io long Connection Push, version Control, Real - Time Active user volume Statistics
Socket. Io long Connection Push, version Control, Real - Time Active user volume Statistics
2022-06-28 05:57:00 【Linguiste abiotique】
Un.、Description du scénario:
Microservice construit une plate - forme de contrôle de version:Vérification en temps réel de chaque application et des utilisateurs en ligne à chaque extrémité de la plate - forme sous l'application,Point pour spécifier les mises à jour logicielles sous chaque plate - forme.Il y a beaucoup d'outils de connexion longue sur le marché,Je choisis ici.socke.io,Parce que la concurrence est testée par des professionnels qui se concentrent sur les plateformes croiséesios、Android、webEt le support dans toutes les langues est assez complet.
2.、Introduction au modèle

Trois、Réalisation de base
1、springbootIntégrationsocket.ioLongue connexion
1.1、pomIntroduire des dépendances
<!-- Longue connexion -->
<dependency>
<groupId>com.corundumstudio.socketio</groupId>
<artifactId>netty-socketio</artifactId>
<version>1.7.19</version>
</dependency>1.2、Initialisation des paramètres de configuration
socketio:
host: localhost
port: 10091
# Définir la longueur maximale des données traitées par image,Empêcher d'autres d'utiliser le Big Data pour attaquer le serveur
maxFramePayloadLength: 1048576
# ParamètreshttpLongueur maximale du contenu interactif
maxHttpContentLength: 1048576
# socketNombre de connexions taille(Si vous n'écoutez qu'un seul portbossLe Groupe de thread est1C'est tout.)
bossCount: 1
workCount: 100
allowCustomRequests: true
# Délai de mise à jour du Protocole(MS),Par défaut10Secondes.HTTPPoignée de main mise à jour àwsDélai d'exécution du Protocole
upgradeTimeout: 1000000
# PingMessage timeout(MS),Par défaut60Secondes,Aucun message de battement de cœur n'est reçu dans cet intervalle de temps et un événement de temporisation est envoyé
pingTimeout: 6000000
# PingIntervalle de message(MS),Par défaut25Secondes.Le client envoie un intervalle de battements de cœur au serveur
pingInterval: 250001.3、 Configuration de la classe de démarrage de connexion longue
import com.corundumstudio.socketio.SocketConfig;
import com.corundumstudio.socketio.SocketIONamespace;
import com.corundumstudio.socketio.SocketIOServer;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import javax.annotation.Resource;
/**
* Classe de configuration de démarrage longue connexion
*/
@Configuration
public class SocketIOConfig implements InitializingBean {
@Resource
private SocketIOHandler socketIOHandler;
@Value("${socketio.host}")
private String host;
@Value("${socketio.port}")
private Integer port;
@Value("${socketio.bossCount}")
private int bossCount;
@Value("${socketio.workCount}")
private int workCount;
@Value("${socketio.allowCustomRequests}")
private boolean allowCustomRequests;
@Value("${socketio.upgradeTimeout}")
private int upgradeTimeout;
@Value("${socketio.pingTimeout}")
private int pingTimeout;
@Value("${socketio.pingInterval}")
private int pingInterval;
public SocketIOServer socketIOServer;
@Override
public void afterPropertiesSet() throws Exception {
SocketConfig socketConfig = new SocketConfig();
socketConfig.setReuseAddress(true);
socketConfig.setTcpNoDelay(true);
socketConfig.setSoLinger(0);
com.corundumstudio.socketio.Configuration configuration = new com.corundumstudio.socketio.Configuration();
configuration.setSocketConfig(socketConfig);
// host Le test local peut être réglé à localhostOu cette machineIP,InLinux Le serveur peut être remplacé par un serveur IP
configuration.setHostname(host);
configuration.setPort(port);
// socketNombre de connexions taille(Si vous n'écoutez qu'un seul portbossLe Groupe de thread est1C'est tout.)
configuration.setBossThreads(bossCount);
configuration.setWorkerThreads(workCount);
configuration.setAllowCustomRequests(allowCustomRequests);
// Délai de mise à jour du Protocole(MS),Par défaut10Secondes.HTTPPoignée de main mise à jour àwsDélai d'exécution du Protocole
configuration.setUpgradeTimeout(upgradeTimeout);
// PingMessage timeout(MS),Par défaut60Secondes,Aucun message de battement de cœur n'est reçu dans cet intervalle de temps et un événement de temporisation est envoyé
configuration.setPingTimeout(pingTimeout);
// PingIntervalle de message(MS),Par défaut25Secondes.Le client envoie un intervalle de battements de cœur au serveur
configuration.setPingInterval(pingInterval);
socketIOServer = new SocketIOServer(configuration);
//Ajouter un auditeur d'événements
socketIOServer.addListeners(socketIOHandler);
// Après ça, c'est app Appliquer la requête dans le tableau Liste des applicationsfor Boucle pour enregistrer l'espace de noms
SocketIONamespace namespace = socketIOServer.addNamespace("/chat");
SocketIONamespace namespace1 = socketIOServer.addNamespace("/ Application 1 id");
SocketIONamespace namespace2 = socketIOServer.addNamespace("/ Application 2 id");
SocketIONamespace namespace3 = socketIOServer.addNamespace("/ Application 3 id");
SocketIONamespace namespace4 = socketIOServer.addNamespace("/ Application IV id");
//DémarrageSocketIOServer
socketIOServer.start();
System.out.println("SocketIODémarrage terminé.");
}
}1.4、 Classe d'enregistrement d'événements de connexion longue
import com.corundumstudio.socketio.HandshakeData;
import com.corundumstudio.socketio.SocketIOClient;
import com.corundumstudio.socketio.annotation.OnConnect;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
/**
* Surveillance des événements de connexion longue
*/
@Component
@Slf4j
public class SocketIOHandler {
@OnConnect
public void onConnect(SocketIOClient client) {
if (!ObjectUtils.isEmpty(client)) {
HandshakeData handshakeData = client.getHandshakeData();
//Selon la plateformeidInscription Par exemple: Android、ios、java、webAttendez.
String platformId= handshakeData.getSingleUrlParam("platformId");
if (!StringUtils.isEmpty(roomId)) {
client.joinRoom(platformId);
}
}
}
}1.5、 Fournir une interface statistique utilisateur à l'extérieur ( Obtient le nombre total d'utilisateurs de l'application ou le nombre d'utilisateurs d'une plate - forme sous l'application )
import com.corundumstudio.socketio.BroadcastOperations;
import com.corundumstudio.socketio.SocketIOClient;
import com.corundumstudio.socketio.SocketIONamespace;
import com.corundumstudio.socketio.SocketIOServer;
import org.springframework.util.ObjectUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.Collection;
@RestController
public class Contrler {
@Resource
private SocketIOConfig socketIOConfig;
@GetMapping("/getAllUser")
public String getAllUser(@RequestBody @Validated GetAllUserDO getAllUserDO) {
SocketIOServer socketIOServer = socketIOConfig.socketIOServer;
if (!ObjectUtils.isEmpty(socketIOServer)) {
SocketIONamespace namespace = socketIOServer.getNamespace("/"+getAllUserDO.getAppId());
if (!ObjectUtils.isEmpty(namespace)) {
if (!ObjectUtils.isEmpty(getAllUserDO.getPlatformId())) {
BroadcastOperations roomOperations = namespace.getRoomOperations(getAllUserDO.getPlatformId() + "");
return roomOperations.getClients().size() + "";
}
Collection<SocketIOClient> allClients = namespace.getAllClients();
return allClients.size() + "";
}
}
return "0";
}
}2、JSLe client établit une longue connexion(ios、Android Attendez que chaque plate - forme soit pertinente sdk Plusieurs lignes de code peuvent être intégrées )
<html>
<head>
<meta charset="utf-8"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.1.0/socket.io.js"></script>
<body>
<h1>Netty-socketio Demo Chat</h1>
<br/>
<div id="console" class="well">
</div>
Nombre total de messages:<div id="msgnum">0</di>
</body>
<script type="text/javascript">
var socket = io.connect('http://localhost:10091/chat?platformId=666');
socket.
socket.on('connect', function() {
output('<span class="connect-msg">Client has connected to the server!</span>');
});
socket.on('disconnect', function() {
output('<span class="disconnect-msg">The client has disconnected!</span>');
});
function sendDisconnect() {
socket.disconnect();
}
</script>
</head>
</html>Quatre、 Le client est connecté au serveur ( Version spécifique push et interaction de données omis )


边栏推荐
- Lenovo hybrid cloud Lenovo xcloud, new enterprise IT service portal
- Yygh-8-appointment registration
- 阿里云短信服务(完整指南),短信发送功能实现。
- 什么是WebRTC?
- 密码学笔记
- 重载,重写的区别,抽象类,接口的区别
- Relevant implementation records of CSI and local disk
- Typescript interface
- RL 实践(0)—— 及第平台辛丑年冬赛季【Rule-based policy】
- Important basis for ERP software company selection
猜你喜欢

Common basic functions of Oracle

How the third-party libraries in cocoapod reference local header files

JQ picture amplifier

YYGH-7-用户管理
![RL practice (0) - and the platform xinchou winter season [rule based policy]](/img/dc/10d615c64123475fea180e035095ff.png)
RL practice (0) - and the platform xinchou winter season [rule based policy]

Data middle office: six questions data middle office

Binder面试之:内存管理单元

pytorch详解

Oracle condition, circular statement

Jenkins continues integration 2
随机推荐
深度學習19種損失函數
原动力×云原生正发声 降本增效大讲堂
函数栈帧的创建和销毁
Relevant implementation records of CSI and local disk
What are the advantages of e-mail marketing? Why do sellers of shopline independent station attach so much importance to it?
Mysql-17- create and manage tables
YYGH-6-微信登录
ERP软件公司选型的重要根据
YYGH-8-预约挂号
Simple handwritten debounce function
若依实现下拉框
Binder interview: memory management unit
一看就会 MotionLayout使用的几种方式
windows上安装redis并永久修改密码,及ssm框架集成redis
YYGH-7-用户管理
Flink window mechanism (two waits and the last explanation)
19 fonctions de perte d'apprentissage profond
数据仓库:DWS层设计原则
How to add live chat in your Shopify store?
Syn retransmission caused by IPVS