Jump to content

Search the Community

Showing results for tags 'websockets'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Q&A Desenvolvimento
    • Perguntas e respostas rápidas
  • Desenvolvimento e Banco de Dados
    • HTML e CSS
    • Java
    • Javascript
    • .NET
    • PHP
    • Python
    • Ruby
    • Mobile
    • Ambientes de Desenvolvimento
    • Arquitetura e Métodos Ágeis
    • Banco de Dados
    • DevOps
    • Desenvolvimento de Games
    • E-Commerce e Pagamentos Online
    • SEO e Otimizações
    • WordPress
    • Algoritmos & Outras Tecnologias
  • Design e Produto
    • Fotografia
    • Photoshop
    • Design de interfaces e UX
    • Edição/Produção de Vídeos
    • Marketing Online
    • Desenho, Ilustração e 3D
  • Entretenimento e uso pessoal
    • Geral
    • Segurança & Malwares
    • Gadgets e wearable
    • Softwares e Apps
    • Entretenimento

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Google+


Hangouts


Skype


Twitter


deviantART


Github


Flickr


LinkedIn


Pinterest


Facebook


Site Pessoal


Localização


Interesses

Found 4 results

  1. MarceloSB

    Sockets PHP + websockets

    Boa tarde colegas, Se alguém puder me dar uma luz, estou com uma dificuldade em relação ao sockets com php, já estou a dias tentando fazer mas ta difícil, rs. A aplicação basicamente tem uma pagina web que vai receber informações quando for incluído algum dado novo no banco de dados através de outra aplicação. Fiz da seguinte forma PAINEL + SERVER PHPSOCKETs + ADMIN Criei um arquivo em php (server.php) que vai ser o servidor de sockets. Eu execute ele pelo shell do linux: php -q server.php 192.168.15.3 8959 require_once("/var/www/html/controller/cfg-system.php"); $host = $argv[1]; //host $port = $argv[2]; //port $null = NULL; //null var // //set_time_limit(0); //ob_implicit_flush(); //Create TCP/IP sream socket $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //reuseable port socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1); //bind socket to specified host socket_bind($socket, 0, $port); //listen to port socket_listen($socket); //create & add listning socket to the list $clients = array($socket); say( ascii_banner() ); say("PHP WebSocket Server running...."); say("Server Started : ".date('Y-m-d H:i:s')); say("Listening on : ".$host." port ".$port); say("Master socket : ".$socket."\n"); say(".... awaiting connections ..."); //start endless loop, so that our script doesn't stop while (true) { //manage multipal connections $changed = $clients; //returns the socket resources in $changed array socket_select($changed, $null, $null, 0, 10); //check for new socket if (in_array($socket, $changed)) { $socket_new = socket_accept($socket); //accpet new socket if ($socket_new) say("$socket: Connected ..."); $clients[] = $socket_new; //add socket to client array $header = socket_read($socket_new, 1024); //read data sent by the socket perform_handshaking($header, $socket_new, $host, $port); //perform websocket handshake socket_getpeername($socket_new, $ip); //get ip address of connected socket $response = mask(json_encode(array('type'=>'system', 'message'=>$ip.':'.$port.' connected'))); //prepare json data if ($response) send_message($response); //notify all users about new connection //make room for new socket $found_socket = array_search($socket, $changed); unset($changed[$found_socket]); } //loop through all connected sockets foreach ($changed as $changed_socket) { //check for any incomming data while(socket_recv($changed_socket, $buf, 1024, 0) >= 1) { $received_text = unmask($buf); //unmask data $received_text = str_replace("\\" ,"",$received_text); $response_text = mask($received_text); if($response_text)send_message($response_text); //send data //} break 2; //exist this loop } $buf = @socket_read($changed_socket, 1024, PHP_NORMAL_READ); if ($buf === false) { // check disconnected client // remove client for $clients array $found_socket = array_search($changed_socket, $clients); socket_getpeername($changed_socket, $ip); unset($clients[$found_socket]); //notify all users about disconnected connection $response = mask(json_encode(array('type'=>'system', 'message'=>$ip.':'.$port.' disconnected'))); if($response)send_message($response); } } } // close the listening socket socket_close($socket); function send_message($msg) { global $clients; foreach($clients as $changed_socket) { if($msg) @socket_write($changed_socket,$msg,strlen($msg)); //say("> ".$msg." (".strlen($msg). " bytes) \n"); } return true; } //Unmask incoming framed message function unmask($text) { $length = ord($text[1]) & 127; if($length == 126) { $masks = substr($text, 4, 4); $data = substr($text, 8); } elseif($length == 127) { $masks = substr($text, 10, 4); $data = substr($text, 14); } else { $masks = substr($text, 2, 4); $data = substr($text, 6); } $text = ""; for ($i = 0; $i < strlen($data); ++$i) { $text .= $data[$i] ^ $masks[$i%4]; } return $text; } //Encode message for transfer to client. function mask($text) { $b1 = 0x80 | (0x1 & 0x0f); $length = strlen($text); if($length <= 125) $header = pack('CC', $b1, $length); elseif($length > 125 && $length < 65536) $header = pack('CCn', $b1, 126, $length); elseif($length >= 65536) $header = pack('CCNN', $b1, 127, $length); return $header.$text; } //handshake new client. function perform_handshaking($receved_header,$client_conn, $host, $port) { $headers = array(); $lines = preg_split("/\r\n/", $receved_header); foreach($lines as $line) { $line = chop($line); if(preg_match('/\A(\S+): (.*)\z/', $line, $matches)) { $headers[$matches[1]] = $matches[2]; } } $secKey = @$headers['Sec-WebSocket-Key']; $secAccept = base64_encode(pack('H*', sha1($secKey . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'))); //hand shaking header $upgrade = "HTTP/1.1 101 Web Socket Protocol Handshake\r\n" . "Upgrade: websocket\r\n" . "Connection: Upgrade\r\n" . "WebSocket-Origin: $host\r\n" . "WebSocket-Location: ws://$host:$port/panel/shout.php\r\n". "Sec-WebSocket-Accept:$secAccept\r\n\r\n"; socket_write($client_conn,$upgrade,strlen($upgrade)); } function ascii_banner() //just for old-skool fun... { $banner=" _ ____ _ _ \n"; $banner.=" __ _____| |__/ ___| ___ ___| | _____| |_\n "; $banner.="\ \ /\ / / _ \ '_ \___ \ / _ \ / __| |/ / _ \ __|\n"; $banner.=" \ V V / __/ |_) |__) | (_) | (__| < __/ |_ \n"; $banner.=" \_/\_/ \___|_.__/____/ \___/ \___|_|\_\___|\__|\n"; return $banner; } //utility functions function say($msg=""){ echo $msg."\n"; } //display server console messages E criei um outro arquivo que vou chamar de painel com websockets que é acesso via navegador http://192.168.15.3/painel/ A ideia é que esse painel receba as informações que forem incluídas e ou alteradas pelo ADMIN. Abaixo o script do websocket, esta conectando e funcionando bem... <script language="javascript" type="text/javascript"> $(document).ready(function(){ //create a new WebSocket object. {WS-HOST} = 192.168.15.3 {WS-PORT} = 8959 var wsUri = "ws://{WS-HOST}:{WS-PORT}"; websocket = new WebSocket(wsUri); websocket.onopen = function(ev) { // connection is open $('#message_box').append("<div class=\"system_msg\">Connected!</div>"); //notify user $('#md-alert').modal('show'); //setTimeout(, 2000); setTimeout(function(){ $('#md-alert').modal('hide'); }, 6000); } //#### Message received from server? websocket.onmessage = function(ev) { if (ev.data){ var $msg = JSON.parse(ev.data); //PHP sends Json data var $type = $msg.type; //message type if($type == 'usermsg') { // mostro mensagems de users.. } //Mensagens do sistema (sockets) if($type == 'system'){ var $umsg = $msg.message; //message text console.log($umsg + " " + $type); } //Conteudo... if($type == 'conteudo'){ //Carrego o conteudo } } }; websocket.onerror = function(ev){ console.log((ev.data)); }; websocket.onclose = function(ev){ console.log((ev.data)); }; }); </script> O problema é agora!! Não estou conseguindo mandar as informações para o socket para o painel ler. NO ADMIN é outra url etc.: http://192.168.15.3/admin/ quando eu publicar o conteudo, logo após o insert no banco de dados, quero mandar essas informações para o socket. Eu tentei usar o seguinte script: /* Get the port for the WWW service. */ $service_port = '8959'; /* Get the IP address for the target host. */ $address = '192.168.15.3'; $socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP); $result = socket_connect($socket, $address, $service_port); if ($result === false) { echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n"; } else echo "Socket conneted $address: $service_port <br >"; if (socket_bind($socket, $address, $service_port)) { echo "Socket bound correctly"; } $buf = 'Test Message'; // Aqui seria o resultado do insert.. $len = strlen($buf); if (socket_sendto($socket, $buf, $len, 0x100, $address, $service_port) !== FALSE) { echo "Message sent correctly"; }
  2. Olá pessoal! Quero atualizar uma div somente quando houver mudança em um determinado campo no banco de dados, atualmente estou usando setTimeout(listComment, 3000);, mas quero mudar para websocket por questões de desempenho e o impacto que causa no tráfego. Procurei alguns exemplos na internet, mas só achei exemplos de chats, e não é o que eu preciso. Alguém tem uma dica de como checar mudanças no bd com websocket somente em uma determinada div? Gostaria de implementar no código abaixo: <div id="output"></div> <script> function listComment() { $.post("listar.php", function (data) { var data = JSON.parse(data); var comments = ""; var replies = ""; var item = ""; var parent = -1; var results = new Array(); var list = $("<ul class='outer-comment'>"); var item = $("<li>").html(comments); for (var i = 0; (i < data.length); i++) { var commentId = data[i]['comment_id']; comments = "<div class='comment-row'>" + "<div class='comment-info'><span class='commet-row-label'>de</span> <span class='posted-by'>" + data[i]['comment_sender_name'] + " </span> <span class='commet-row-label'>às</span> <span class='posted-at'>" + data[i]['date'] + "</span></div>" + "<div class='comment-text'>" + data[i]['comment'] + "</div>" + "<div><a class='btn-reply' onClick='postReply(" + commentId + ")'>Responder</a></div>" + "</div>"; var item = $("<li>").html(comments); list.append(item); var reply_list = $('<ul>'); item.append(reply_list); listReplies(commentId, data, reply_list); // } } setTimeout(listComment, 3000); $("#output").html(list); }); } </script> Muito Obrigado!
  3. douglasGtads

    RFC websockets dúvida

    O protocolo de comunicação de websockets (aquele presente na RFC, como por exemplo a definição e verificação de que a mensagem enviada deve apresentar um identificador de início e fim de mensagem), deve ser implementado também no objeto Javascript que representa o websocket no script implementado pelo desenvolvedor e executado pelo navegador? Tenho a impressão de que as exigências explicitadas por essa RFC ficam somente dentro do contexto entre navegadores e servidores web... Me corrijam se eu estiver errado.
  4. Olá galera, estou trabalhando num projeto no laravel 5.1 e to fazendo um sistema de notificações no projeto em tempo real com broadcasting então fiz uma rota para que ao cadastrar um novo funcionário seja notificado para os users logados no sistema por exemplo: Route::get('funcionarios/create', function(){ $funcionario = \App\Models\Funcionario::find(9); event(new \App\Events\CreateFuncionario($funcionario)); return $funcionario; }); o broadcast_driver que estou usando é o pusher, então fiz um conta gratuita para testar e coloquei minhas credenciais no arquivo \config\broadcasting.php da minha aplicação e na minha view coloquei o seguinte: <script src="https://js.pusher.com/3.0/pusher.min.js"></script> <script type="text/javascript"> var pusher = new Pusher('slkhdfslhkhdsfhlkhlkhkldsfs', { encrypted: true }); var channel = pusher.subscribe('funcionario_channel'); channel.bind('App\\Events\\CreateFuncionario', function(data){ $('#msg').text(' O funcionario acaba de ser criado'); $('#sucesso').show(); }); </script> tudo certinho, e tenho erro: Class 'Pusher' not found BroadCastManager.php line 124 Alguém pode me ajudar?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.