Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   web сокет не хочет работать по ssl (https://javascript.ru/forum/dom-window/76847-web-soket-ne-khochet-rabotat-po-ssl.html)

Devil666 20.02.2019 16:10

web сокет не хочет работать по ssl
 
есть java script
вот его код

var scribe = require('scribe-js')(),
app = require('express')(),
server = require('http').Server(app),
io = require('socket.io')(server),
requestify = require('requestify');
var schedule = require('node-schedule');
server.listen(8080);

add_online();
setInterval(add_online, 60000);
activebots();


io.sockets.on('connection', function (socket) {
updateOnline();
getDrops();

socket.on('newDrop', function(id){
requestify.post('http://localhost/api/getGame', { id: id})
.then(function (response) {
data = JSON.parse(response.body);
io.sockets.emit('nd', data.text);
}, function (err) {
console.log(err);
});

});

socket.on('disconnect', function () {
updateOnline();
});

});
function updateOnline(){
io.sockets.emit('updateonline', Number(Object.keys(io.sockets.adapter.rooms).lengt h) + Number(global.online));
console.info('Connected ' + Object.keys(io.sockets.adapter.rooms).length + ' clients');

}


function getDrops(){
requestify.post('http://localhost/api/getdrops', {})
.then(function (response) {
data = JSON.parse(response.body);
io.emit('welcomedrop', data.text);
console.log("stats");
}, function (err) {
console.log(err);
});
};

function activebots()
{
console.log("\x1b[32m", "[NVBOT] Функция ботов сработала!");
requestify.post('http://localhost/api/playbot', {})
.then(function (response) {
data = JSON.parse(response.body);
var time = data.time;
console.log("\x1b[32m", "[NVBOT] Фейк-Игра сыграна! ID: "+data.game+" Время: "+ Number(data.time)+"мс");
requestify.post('http://localhost/api/getGame', { id: data.game})
.then(function (response) {
data = JSON.parse(response.body);
io.sockets.emit('nd', data.text);


setTimeout(function() {
activebots();
}, time);

}, function (err) {
console.log(err);
setTimeout(activebots, 50000);
});


}, function (err) {
console.log("\x1b[31m", "[NVBOT] Ошибка запроса");
setTimeout(activebots, 50000);
});
}

function add_online()
{
requestify.post('http://localhost/api/getonline', {})
.then(function (response) {
data = JSON.parse(response.body);
global.online = data.online;
console.log("\x1b[32m", "[NVBOT] Фейк онлайн обновлен! (+" + data.online + ")");
updateOnline();
}, function (err) {
console.log("\x1b[31m", "[NVBOT] Ошибка получения фейкового онлайна");
});
}



А вот PHP

<script src="./files/socket.io-1.4.5.js"></script>
<script>
var socket = io.connect(':8080', {rememberTransport: false});

socket.on('welcomedrop', function(data){
$("#response").prepend(data);
//$("#oe").html(kk.count);
$('#response').children().slice(20).remove();
});

socket.on('updateonline', function(data){
$("#oe").html(data);
});

socket.on('nd', function(data){
$("#response").prepend(data);
$('#response').children().slice(20).remove();
});
</script>
<script>

$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});

$(function() {

window.history.replaceState(null, null, window.location.pathname);
// getContent();


/*
var conn1 = new WebSocket('ws://82.146.44.43:5858');
conn1.onmessage = function(e) {
var kk = JSON.parse(e.data);


$("#response").prepend(kk.new);
$("#oe").html(kk.count);
$('#response').children().slice(20).remove();
};

var conn2 = new WebSocket('ws://82.146.44.43:8081');
conn2.onmessage = function(e) {
var kk = JSON.parse(e.data);


как мне сделать так чтобы скрипт коннектился к веб сокету по 443 протоколу но не 8080

Devil666 20.02.2019 16:13

пробовал менять на 443 везде, пишет ошибку в консоле not found socket

SuperZen 20.02.2019 16:59

1) сам сервер должен обслуживать https - https://stackoverflow.com/questions/...ress-js-server

2) потом надо подключиться как здесь https://stackoverflow.com/questions/...et-io-with-ssl

сходу как правильно не скажу, но эти 2 надо сделать... просто версии меняются и что там у тебя я хз %)

п/с/ есть варик, надо будет написать не https, a wss...

Devil666 20.02.2019 17:32

не понимаю ничего(
 
не получается настроить( можете помоч?

SuperZen 20.02.2019 20:09

$ mkdir testwss
$ cd testwss
$ yarn init
$ yarn add express socket.io socket.io-client

package.json
{
  "name": "testwss",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "dependencies": {
    "express": "^4.16.4",
    "socket.io": "^2.2.0",
    "socket.io-client": "^2.2.0"
  }
}


wss.js
var fs = require('fs')
var express = require('express')
var app = express()
var server = require('https').createServer({
  key: fs.readFileSync('./key.pem'),
  cert: fs.readFileSync('./cert.pem'),
  passphrase: 'password'
}, app)
var io = require('socket.io')(server)

app.use(express.static(__dirname + '/public'))

app.get('/', function (req, res) {
  res.sendFile(__dirname + '/index.html')
})

io.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' })
  socket.on('my other event', function (data) {
    console.log(data);
  })
})

server.listen(3000, function () {
  console.log('started at https:/localhost:3000')
})


index.html
<html>

<head>
  <title>Socket.IO WSS</title>
</head>

<body>
  <h1>Socket.io wss</h1>
  <script src="socket.io.js"></script>
  <script>
    var socket = io.connect('wss://localhost:3000');
    socket.on('news', function (data) {
      console.log(data);
      socket.emit('my other event', { my: 'data' });
    });
  </script>
</body>

</html>


создать папку
public

в нее скопировать:
- node_modules/socket.io-client/dist/socket.io.js
- node_modules/socket.io-client/dist/socket.io.js.map

установить openssl https://www.openssl.org/

сгенерировать ключи:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem

положить их в корень папки testwss

запускать:
$ node wss.js

в браузере открывать https://localhost:3000

в консоле в браузере смотреть что все ок %)

Devil666 20.02.2019 22:11

root@222:/# sudo netstat -ntulp
/etc/host.conf: line 5: bad command `localhost 222.ru'
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 502/redis-server 12
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 541/apache2
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 392/sshd
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 541/apache2
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 441/mysqld
tcp6 0 0 :::8080 :::* LISTEN 751/bot.js
tcp6 0 0 :::22 :::* LISTEN 392/sshd

SuperZen 21.02.2019 06:13

здесь какая-то ошибка
/etc/host.conf: line 5: bad command `localhost 222.ru'

тогда, там должно быть что-то типа:
127.0.0.1 localhost 222.ru


Часовой пояс GMT +3, время: 01:56.