This commit is contained in:
Abdussamed ULUTAŞ 2023-02-24 00:03:27 +03:00
parent edfb9e09d1
commit 715ab15a23
6 changed files with 179 additions and 4 deletions

View File

@ -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;

View File

@ -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"))
}); });

66
Source/Notify.js Normal file
View File

@ -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;

View File

@ -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}) => {

66
index.js Normal file
View File

@ -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);

View File

@ -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>