Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Связаться с сокетом / 13 сообщений из 13, страница 1 из 1
03.02.2016, 14:14
    #39161989
Areostar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связаться с сокетом
на основе уроков из сети написал вот такой код:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
window.onload = function()
{
	var label = document.getElementById("status");
	var message = document.getElementById("message");
	var btnSend = document.getElementById("send");
	var btnStop = document.getElementById("stop");
	
	var socket = new WebSocket("ws://echo.websocket.org");
	
	socket.onopen = function(event){
		label.innerHTML = "Соединились c сервером " + socket.url;
	};
	socket.onclose = function(event){
		label.innerHTML = "Соединение закрыто";
		
		var code = event.code;
		var reason = event.reason;
		var wasClean = event.wasClean;
		
		alert(wasClean);
		
		if(wasClean)
		{
			label.innerHTML = "Соединение закрыто корректно!";
		}
		else
		{
			label.innertHTML = "Соединение закрыто с ошибкой! Причина" + reason + " Код " + code;
		}
	};
	
	socket.onerror = function(event){
		console.log("error");
	};
	
	
    socket.onmessage = function(event){
		if(typeof event.data === "string")
		{
			label.innerHTML = event.data;
		}
	};
	
	btnSend.onclick = function(event) {
		if(socket.readyState === WebSocket.OPEN)
		{
			socket.send(message.value);
		}
	};
	
	btnStop.onclick = function() {
		if(socket.readyState === WebSocket.OPEN)
		{
			socket.close();
		}
	};
};



с тестовым сокетом связываюсь без проблем.

у меня есть хост(VPS) c доменом. открываю там поддомен. кладу туда файлик с кодом сокета на PHP.

меняю

Код: javascript
1.
var socket = new WebSocket("ws://echo.websocket.org");



на

Код: javascript
1.
var socket = new WebSocket("ws://поддемен.домен.info/socketServer.php");



соединение пытается открыться, но тут же закрывается с кодом 1006

к сокету надо както подругому обращаться или это на стороне PHP ошибки какие то?
...
Рейтинг: 0 / 0
03.02.2016, 17:20
    #39162252
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связаться с сокетом
Areostar,

а что там в socketServer.php ?

поиск "websocket php" может помочь
...
Рейтинг: 0 / 0
03.02.2016, 18:51
    #39162332
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связаться с сокетом
Areostar,
прежде всего сходи с той машины, где этот код запускается на указанный хост и порт с помощью telnet.
вот этот самый под домен домен, и номер порта из сервиса ws возми.

если соединение установится, можно думать далее.
...
Рейтинг: 0 / 0
03.02.2016, 20:10
    #39162402
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связаться с сокетом
Areostar,
ws по 80 порту????
...
Рейтинг: 0 / 0
04.02.2016, 01:38
    #39162514
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связаться с сокетом
вадя,
я лично не знаю...
...
Рейтинг: 0 / 0
04.02.2016, 01:42
    #39162516
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связаться с сокетом
https://tools.ietf.org/html/rfc6455
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
1.7.  Relationship to TCP and HTTP

   _This section is non-normative._

   The WebSocket Protocol is an independent TCP-based protocol.  Its
   only relationship to HTTP is that its handshake is interpreted by
   HTTP servers as an Upgrade request.

   By default, the WebSocket Protocol uses port 80 for regular WebSocket
   connections and port 443 for WebSocket connections tunneled over
   Transport Layer Security (TLS) [RFC2818].
...
Рейтинг: 0 / 0
04.02.2016, 09:05
    #39162608
Areostar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связаться с сокетом
В сети нащёл вот такой ответ

авторОказалось, это фича, а не баг. В коде (websocket.c):

if (cmd_is_subscribe(cmd)) {
r->keep_alive = 1;
}

Изменение этого параметра решило часть проблем

а где это фаил находится? На сервере?
и Что там должно быть 1 или 0?

в socketServer.php простенькид код, примерчик из сети
проверка через telnet вроде в порядке

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
<?php
	ini_set('error_reporting', E_ALL);
	ini_set('display_errors', 1);
	ini_set('display_startup_errors', 1);

	set_time_limit(0);
	
	$host = "148.251.95.199";
	$port = 4096;
	
	if(extension_loaded('sockets')) echo "WebSockets OK";
    else echo "WebSockets UNAVAILABLE";

	$socket = socket_create(AF_INET, SOCK_STREAM, 0);

	$result = socket_bind($socket, $host, $port);

	$result = socket_listen($socket, 3);

	$spawn = socket_accept($socket) or die("Could not accept incoming connection\n");

	$input = socket_read($spawn, 1024) or die("Could not read input\n");
	$input = trim($input);
	echo "Client Message : ".$input."
";
	$output = strrev($input) ."
";
	socket_write($spawn, $output, strlen ($output)) or die("Could not write output\n");

	socket_close($spawn);
	socket_close($socket);
?>
...
Рейтинг: 0 / 0
04.02.2016, 09:22
    #39162619
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связаться с сокетом
mayton https://tools.ietf.org/html/rfc6455
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
1.7.  Relationship to TCP and HTTP

   _This section is non-normative._

   The WebSocket Protocol is an independent TCP-based protocol.  Its
   only relationship to HTTP is that its handshake is interpreted by
   HTTP servers as an Upgrade request.

   By default, the WebSocket Protocol uses port 80 for regular WebSocket
   connections and port 443 for WebSocket connections tunneled over
   Transport Layer Security (TLS) [RFC2818].


я б определился с портом , для начала,
потому как не понятно , кто слушает 80 порт на сервере...
...
Рейтинг: 0 / 0
04.02.2016, 10:22
    #39162685
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связаться с сокетом
Не спорю по сабжу но просто дополняю.

Тут достаточно доходчиво пишут почему 80/443 желательны для инфраструктуры ws.
Опять-же это не есть требование для автора. Скорее просто пожелания чтоб делать именно так.

http://stackoverflow.com/questions/28522857/shall-i-use-websocket-on-ports-other-than-80
...
Рейтинг: 0 / 0
05.02.2016, 10:18
    #39163586
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связаться с сокетом
maytonНе спорю по сабжу но просто дополняю.

Тут достаточно доходчиво пишут почему 80/443 желательны для инфраструктуры ws.
Опять-же это не есть требование для автора. Скорее просто пожелания чтоб делать именно так.

http://stackoverflow.com/questions/28522857/shall-i-use-websocket-on-ports-other-than-80

не совсем понял, что там , но у тс
у меня есть хост(VPS) c доменом. открываю там поддомен. кладу туда файлик с кодом сокета на PHP.
поэтому порт 80 скорее всего занят.
...
Рейтинг: 0 / 0
05.02.2016, 12:07
    #39163738
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связаться с сокетом
Чем он занят? Если честно я невкурсе как реализован WebSocket на PHP.

Если кодинг на PHP исключает листенер вебсокета на том-же самом порту - то ты прав.
...
Рейтинг: 0 / 0
05.02.2016, 15:23
    #39164076
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связаться с сокетом
maytonЧем он занят? Если честно я невкурсе как реализован WebSocket на PHP.

Если кодинг на PHP исключает листенер вебсокета на том-же самом порту - то ты прав.
по умолчанию все сайты слушают 80 порт. я не представляю как две независимых проги могут сидеть на одном порту, без допонительного обработчика…
...
Рейтинг: 0 / 0
05.02.2016, 17:14
    #39164278
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связаться с сокетом
Автор а есть-ли возможность сделать так на PHP?
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
        $host = "148.251.95.199";
	$port = 80;
	
	if(extension_loaded('sockets')) echo "WebSockets OK";
    else echo "WebSockets UNAVAILABLE";

	$socket = socket_create(AF_INET, SOCK_STREAM, 0);

	$result = socket_bind($socket, $host, $port);
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Связаться с сокетом / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]