Как получать данные в реальном времени из сокета TCP с помощью PHP или JS? [Дубликат]

Вы хотите, чтобы ваши обновления пользовательского интерфейса выполнялись в уже существующем потоке пользовательского интерфейса.

Лучший способ - использовать обработчик, который использует postDelayed для запуска Runnable после задержки (каждый запуск расписания следующий) ; очистите обратный вызов с помощью removeCallbacks.

Вы уже смотрите в нужном месте, поэтому посмотрите на это снова, возможно, уточните, почему этот образец кода не тот, который вы хотите. (См. Также ту же статью в Обновление пользовательского интерфейса из таймера ).

70
задан Darren 27 June 2013 в 08:51
поделиться

4 ответа

См. jsocket . Не использовал его сам. Прошло более 3 лет с момента последнего обновления (по состоянию на 26/6/2014).

* Используется flash: (

Из документации :

<script type='text/javascript'>
    // Host we are connecting to
    var host = 'localhost'; 
    // Port we are connecting on
    var port = 3000;

    var socket = new jSocket();

    // When the socket is added the to document 
    socket.onReady = function(){
            socket.connect(host, port);             
    }

    // Connection attempt finished
    socket.onConnect = function(success, msg){
            if(success){
                    // Send something to the socket
                    socket.write('Hello world');            
            }else{
                    alert('Connection to the server could not be estabilished: ' + msg);            
            }       
    }
    socket.onData = function(data){
            alert('Received from socket: '+data);   
    }

    // Setup our socket in the div with the id="socket"
    socket.setup('mySocket');       
</script>
5
ответ дан AlikElzin-kilaka 21 August 2018 в 14:52
поделиться
  • 1
    Какие браузеры поддерживают сырые сокеты? – AlikElzin-kilaka 27 June 2014 в 07:19
  • 2
  • 3
    Любая производительность увеличивается по сравнению с Websockets и Rawsockets? – NiCk Newman 19 November 2015 в 13:49
  • 4
    Не разрешает javascript в браузере подключаться к порту tcp, дыре в безопасности? Представьте javascript в вашем firefox / chrome, подключающемся ко всему, что вы запускаете локально (скажем, MySQL DB), и публикуете данные на злой сайт? – Arun Avanathan 5 September 2016 в 17:16
  • 5
    @ArunAvanathan, что бы вы ни делали с ajax, вы можете делать с сокетами и наоборот ... нет проблемы безопасности, как я думаю. – Firas Abd Alrahman 20 August 2017 в 22:49
Проект

ws2s предназначен для подключения сокета к js-стороне браузера. Это сервер websocket, который преобразует websocket в сокет.

Схема ws2s

пример кода:

var socket = new WS2S("wss://ws2s.feling.io/").newSocket()

socket.onReady = () => {
  socket.connect("feling.io", 80)
  socket.send("GET / HTTP/1.1\r\nHost: feling.io\r\nConnection: close\r\n\r\n")
}

socket.onRecv = (data) => {
  console.log('onRecv', data)
}
3
ответ дан chenyan 21 August 2018 в 14:52
поделиться

Вы можете использовать HTML5 Web Sockets:

var connection = new WebSocket('ws://IPAddress:Port');

connection.onopen = function () {
  connection.send('Ping'); // Send the message 'Ping' to the server
};

http://www.html5rocks.com/en/tutorials/websockets/basics/

Ваш сервер также должен прослушиваться с сервера WebSocket, такого как pywebsocket, иначе вы можете написать свой собственный, как описано в Mozilla

Дополнительно:

Обновить : Из проекта W3C в январе 2016 года:

Это будет возможно через интерфейс навигатора, как показано ниже:

http://raw-sockets.sysapps.org/# interface-tcpsocket

https://www.w3.org/TR/tcp-udp-sockets/

navigator.tcpPermission.requestPermission({remoteAddress:"127.0.0.1", remotePort:6789}).then(
  () => {
    // Permission was granted
    // Create a new TCP client socket and connect to remote host
    var mySocket = new TCPSocket("127.0.0.1", 6789);

    // Send data to server
    mySocket.writeable.write("Hello World").then(
        () => {

            // Data sent sucessfully, wait for response
            console.log("Data has been sent to server");
            mySocket.readable.getReader().read().then(
                ({ value, done }) => {
                    if (!done) {
                        // Response received, log it:
                        console.log("Data received from server:" + value);
                    }

                    // Close the TCP connection
                    mySocket.close();
                }
            );
        },
        e => console.error("Sending error: ", e);
    );
22
ответ дан Darren 21 August 2018 в 14:52
поделиться
  • 1
    Чтобы подробнее рассказать об этом ответе: сервер должен также прослушиваться с сервера WebSocket. WebSockets не может напрямую подключаться к сырым TCP-сокетам. websockify - это инструмент, который действует как прокси-сервер WebSocket-to-TCP: он сидит на вашем сервере и слушает подключения к WebSocket, а затем перенаправляет связь WebSocket в и из указанного TCP-сокета. – apsillers 13 September 2012 в 15:02
  • 2
    Это означает, что не отвечает на вопрос - websocket является протоколом по TCP (например, HTTP), а не прямой TCP-связью. – AlikElzin-kilaka 29 June 2014 в 15:00
  • 3
    но как поместить сообщение в окно браузера? :( – shzyincu 18 August 2016 в 07:08
  • 4
    @shzyincu вам нужна DOM-манипуляция для этого, и ответ немного больше связан с простым комментарием. вы должны задать новый вопрос об этом – Ciprian Tomoiagă 7 September 2016 в 12:43
  • 5
    @DarrenDavies имеет youtube реализовал websocket? как работает их потоковый сервер? Любая идея, что будет? – Alex 14 September 2016 в 13:41

Решение, которое вы действительно ищете, это веб-сокеты. Однако в проекте хром были разработаны некоторые новые технологии, которые являются прямыми TCP-соединениями TCP chromium

0
ответ дан Sdedelbrock 21 August 2018 в 14:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: