Commit
This commit is contained in:
parent
edfb9e09d1
commit
715ab15a23
|
@ -1,3 +1,5 @@
|
||||||
|
const { CLIENT_SEND_MESSAGE } = require("./Notify");
|
||||||
|
|
||||||
function Client()
|
function Client()
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
@ -21,6 +23,9 @@ function Client()
|
||||||
this.APNumber = 0;
|
this.APNumber = 0;
|
||||||
this.APShortCode = 0;
|
this.APShortCode = 0;
|
||||||
this.APIPAddress = 0;
|
this.APIPAddress = 0;
|
||||||
|
|
||||||
|
this.isProxy = false;
|
||||||
|
this.proxyProcess = null;
|
||||||
};
|
};
|
||||||
/**
|
/**
|
||||||
* @type {Map<string, Client>}
|
* @type {Map<string, Client>}
|
||||||
|
@ -75,7 +80,12 @@ Client.prototype.pairList = function(){
|
||||||
};
|
};
|
||||||
|
|
||||||
Client.prototype.send = function(obj){
|
Client.prototype.send = function(obj){
|
||||||
this.socket.sendUTF(JSON.stringify(obj));
|
if(this.isProxy)
|
||||||
|
{
|
||||||
|
CLIENT_SEND_MESSAGE(this.id, obj)
|
||||||
|
}else{
|
||||||
|
this.socket.sendUTF(JSON.stringify(obj));
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.Client = Client;
|
exports.Client = Client;
|
|
@ -11,11 +11,19 @@ server.addListener("request", app);
|
||||||
app.use(compression({
|
app.use(compression({
|
||||||
level: 9
|
level: 9
|
||||||
}));
|
}));
|
||||||
|
|
||||||
server.listen(7707,'0.0.0.0',() => {
|
server.listen(7707,'0.0.0.0',() => {
|
||||||
termoutput && console.log("HTTP Service Running...");
|
termoutput && console.log("HTTP Service Running...");
|
||||||
});
|
});
|
||||||
|
server.addListener("error",(err)=> {
|
||||||
|
console.err(err)
|
||||||
|
})
|
||||||
exports.http = server;
|
exports.http = server;
|
||||||
|
|
||||||
|
app.get("/",(req,res)=>{
|
||||||
|
res.send("pid : " + process.pid)
|
||||||
|
})
|
||||||
|
|
||||||
app.get("/script",(request, response)=>{
|
app.get("/script",(request, response)=>{
|
||||||
response.sendFile(resolve("./script/index.js"))
|
response.sendFile(resolve("./script/index.js"))
|
||||||
});
|
});
|
||||||
|
|
|
@ -0,0 +1,66 @@
|
||||||
|
process.on('message',data => {
|
||||||
|
const {Client} = require("./Client.js")
|
||||||
|
switch(data.type)
|
||||||
|
{
|
||||||
|
case "CLIENT_CREATED":{
|
||||||
|
let client = new Client();
|
||||||
|
client.isProxy = true;
|
||||||
|
client.proxyProcess = data.pid;
|
||||||
|
client.id = data.uuid;
|
||||||
|
Client.clients.set(client.id, client);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "CLIENT_UPDATE_PROP":{
|
||||||
|
let client = Client.clients.get(data.uuid);
|
||||||
|
client[data.name] = value;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "CLIENT_SEND_MESSAGE":{
|
||||||
|
let client = Client.clients.get(data.uuid);
|
||||||
|
client.send(data.message)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "CLIENT_DESTROY":{
|
||||||
|
Client.clients.delete(data.uuid);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function CLIENT_CREATED(uuid)
|
||||||
|
{
|
||||||
|
console.log(process.pid, "CLIENT_CREATED");
|
||||||
|
process.send({
|
||||||
|
type:'CLIENT_CREATED',
|
||||||
|
uuid: uuid
|
||||||
|
})
|
||||||
|
};
|
||||||
|
function CLIENT_UPDATE_PROP(uuid, name, value)
|
||||||
|
{
|
||||||
|
process.send({
|
||||||
|
type:'CLIENT_UPDATE_PROP',
|
||||||
|
uuid: uuid,
|
||||||
|
name,
|
||||||
|
value
|
||||||
|
})
|
||||||
|
};
|
||||||
|
function CLIENT_SEND_MESSAGE(uuid, message)
|
||||||
|
{
|
||||||
|
process.send({
|
||||||
|
type:'CLIENT_SEND_MESSAGE',
|
||||||
|
uuid: uuid,
|
||||||
|
message
|
||||||
|
})
|
||||||
|
};
|
||||||
|
function CLIENT_DESTROY(uuid)
|
||||||
|
{
|
||||||
|
process.send({
|
||||||
|
type:'CLIENT_DESTROY',
|
||||||
|
uuid: uuid
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.CLIENT_CREATED = CLIENT_CREATED;
|
||||||
|
exports.CLIENT_UPDATE_PROP = CLIENT_UPDATE_PROP;
|
||||||
|
exports.CLIENT_DESTROY = CLIENT_DESTROY;
|
||||||
|
exports.CLIENT_SEND_MESSAGE = CLIENT_SEND_MESSAGE;
|
|
@ -5,6 +5,7 @@ let {http} = require("./HTTPServer");
|
||||||
let {randomUUID} = require("crypto");
|
let {randomUUID} = require("crypto");
|
||||||
const { Client } = require("./Client.js");
|
const { Client } = require("./Client.js");
|
||||||
const { termoutput } = require("./config");
|
const { termoutput } = require("./config");
|
||||||
|
const { CLIENT_CREATED, CLIENT_DESTROY } = require("./Notify");
|
||||||
termoutput && console.log("Web Socket Protocol is ready");
|
termoutput && console.log("Web Socket Protocol is ready");
|
||||||
|
|
||||||
http.addListener("upgrade",() => {
|
http.addListener("upgrade",() => {
|
||||||
|
@ -20,6 +21,9 @@ let global = new Map();
|
||||||
let clients = new Map();
|
let clients = new Map();
|
||||||
wsServer.addListener("connect",(socket) => {
|
wsServer.addListener("connect",(socket) => {
|
||||||
|
|
||||||
|
socket.send("worker id " + process.pid);
|
||||||
|
return;
|
||||||
|
|
||||||
let xClient = new Client();
|
let xClient = new Client();
|
||||||
let id = randomUUID();
|
let id = randomUUID();
|
||||||
socket.id = id;
|
socket.id = id;
|
||||||
|
@ -29,9 +33,12 @@ wsServer.addListener("connect",(socket) => {
|
||||||
Client.clients.set(id, xClient);
|
Client.clients.set(id, xClient);
|
||||||
clients.set(id, xClient);
|
clients.set(id, xClient);
|
||||||
|
|
||||||
|
CLIENT_CREATED(id);
|
||||||
|
|
||||||
emit("connect", global, xClient);
|
emit("connect", global, xClient);
|
||||||
socket.addListener("close",()=>{
|
socket.addListener("close",()=>{
|
||||||
emit("disconnect", global, xClient);
|
emit("disconnect", global, xClient);
|
||||||
|
CLIENT_DESTROY(id);
|
||||||
Client.clients.set(id, xClient);
|
Client.clients.set(id, xClient);
|
||||||
});
|
});
|
||||||
socket.addListener("message",({type,utf8Data}) => {
|
socket.addListener("message",({type,utf8Data}) => {
|
||||||
|
|
|
@ -0,0 +1,66 @@
|
||||||
|
/** @type {import('node:cluster').Cluster} */
|
||||||
|
const cluster = require("cluster");
|
||||||
|
const os = require("os");
|
||||||
|
const {randomInt} = require("crypto");
|
||||||
|
|
||||||
|
cluster.schedulingPolicy = cluster.SCHED_RR;
|
||||||
|
|
||||||
|
async function main()
|
||||||
|
{
|
||||||
|
let master = new Map();
|
||||||
|
|
||||||
|
if(cluster.isPrimary)
|
||||||
|
{
|
||||||
|
let e = 0|0
|
||||||
|
while (e < 10)
|
||||||
|
{
|
||||||
|
e++;
|
||||||
|
let flow = await generateFlow();
|
||||||
|
flow.send({
|
||||||
|
TYPE:"start"
|
||||||
|
})
|
||||||
|
master.set(flow.id, flow);
|
||||||
|
flow.message((_id, obj) =>{
|
||||||
|
for (const [id,{send}] of master) {
|
||||||
|
if(_id !== id)
|
||||||
|
{
|
||||||
|
send({
|
||||||
|
...obj,
|
||||||
|
pid: flow.id
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
};
|
||||||
|
}else{
|
||||||
|
let Application;
|
||||||
|
let synced = [];
|
||||||
|
process.on("message",data => {
|
||||||
|
switch(data.TYPE)
|
||||||
|
{
|
||||||
|
case "start":{
|
||||||
|
Application = require("./Source/index");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function generateFlow(N)
|
||||||
|
{
|
||||||
|
const worker = cluster.fork();
|
||||||
|
await new Promise(ok => {
|
||||||
|
worker.addListener("online",()=> {
|
||||||
|
ok()
|
||||||
|
})
|
||||||
|
});
|
||||||
|
let id = worker.process.pid;
|
||||||
|
|
||||||
|
return {
|
||||||
|
id,
|
||||||
|
send: message => worker.send(message),
|
||||||
|
message: (callback) => worker.addListener("message", e => callback(id,e))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
process.nextTick(main);
|
24
test.html
24
test.html
|
@ -7,11 +7,11 @@
|
||||||
<title>Document</title>
|
<title>Document</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<h1 id="message"></h1>
|
||||||
<script src="./script/index.js"></script>
|
<script src="./script/index.js"></script>
|
||||||
<script>
|
<script>
|
||||||
var wsjs, iroom;
|
|
||||||
async function main(){
|
async function main(){
|
||||||
wsjs = new MWSE({
|
const wsjs = new MWSE({
|
||||||
endpoint: "ws://localhost:7707"
|
endpoint: "ws://localhost:7707"
|
||||||
});
|
});
|
||||||
wsjs.scope(async ()=>{
|
wsjs.scope(async ()=>{
|
||||||
|
@ -33,6 +33,15 @@
|
||||||
console.log(args)
|
console.log(args)
|
||||||
});
|
});
|
||||||
iroom = room;
|
iroom = room;
|
||||||
|
/*setInterval(()=>{
|
||||||
|
wsjs.server.tranferToServer({
|
||||||
|
e0:Math.random(),
|
||||||
|
e1:Math.random(),
|
||||||
|
e2:Math.random(),
|
||||||
|
e3:Math.random(),
|
||||||
|
e4:Math.random()
|
||||||
|
})
|
||||||
|
}, 10)*/
|
||||||
});
|
});
|
||||||
wsjs.on('peer',(peer)=>{
|
wsjs.on('peer',(peer)=>{
|
||||||
peer.on('message',(...args)=>{
|
peer.on('message',(...args)=>{
|
||||||
|
@ -40,7 +49,16 @@
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
main();
|
|
||||||
|
let ws = new WebSocket("ws://localhost:7707");
|
||||||
|
ws.onmessage = function({data}){
|
||||||
|
message.innerText = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
// main();
|
||||||
|
/*for (const iterator of Array.from({length:90}).fill(0)) {
|
||||||
|
main();
|
||||||
|
}*/
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
Loading…
Reference in New Issue