давайте напишем фрейворк для работы с WS нашел вот что http://ru.wikipedia.org/wiki/WebSocket и подумал давайте сервеную часть вместе напишем на php ? или я опоздал и это уже есть ? что нить типа мини фрейворка можно наляпать. скажите хоть куда копать. подкиньте понятных статей по ws . я напишу и исходник выкину. только покажите где почитать плиз. ну очень интересно стало. ps. узнал что для этого придется написать эмуляцию протокола . что это значит скиньте ссылок . ps2. вот ссылка на клиента http://code.google.com/p/jquery-websocket/ ps3. нарыл это http://www.w3.org/TR/2011/CR-websockets-20111208/#the-websocket-interface . что за язык в исходниках ? ps4. итого http://code.google.com/p/phpwebsocket/ или http://habrahabr.ru/post/82140/
barnaki Насколько знаю, вебсокет не является стандартом по факту и все может в любой момент поломаться. На гитхабе не смотрели? http://bit.ly/HnUoZh
2 Gifts но штука то все = крутая . правда тут http://code.google.com/p/jquery-websocket/issues/list сказано undefined in Firefox . а может уже пофиксили. весь фреймв то Code: /* * jQuery Web Sockets Plugin v0.0.1 * http://code.google.com/p/jquery-websocket/ * * This document is licensed as free software under the terms of the * MIT License: http://www.opensource.org/licenses/mit-license.php * * Copyright (c) 2010 by shootaroo (Shotaro Tsubouchi). */ (function($){ $.extend({ websocketSettings: { open: function(){}, close: function(){}, message: function(){}, options: {}, events: {} }, websocket: function(url, s) { var ws = WebSocket ? new WebSocket( url ) : { send: function(m){ return false }, close: function(){} }; $(ws) .bind('open', $.websocketSettings.open) .bind('close', $.websocketSettings.close) .bind('message', $.websocketSettings.message) .bind('message', function(e){ var m = $.evalJSON(e.originalEvent.data); var h = $.websocketSettings.events[m.type]; if (h) h.call(this, m); }); ws._settings = $.extend($.websocketSettings, s); ws._send = ws.send; ws.send = function(type, data) { var m = {type: type}; m = $.extend(true, m, $.extend(true, {}, $.websocketSettings.options, m)); if (data) m['data'] = data; return this._send($.toJSON(m)); } $(window).unload(function(){ ws.close(); ws = null }); return ws; } }); })(jQuery); ps. может это от того что он не во всех браузерах включен по умолчанию ?или словами Gifts или они там не совсем дебилы. завтра проверю или я не так понял ? что значит поломатся ?
Большинство людей все еще используют браузеры без поддержки вебсокетов, а в IE скорее всего вообще никогда не будет их поддержки. В конце 2010 - начале 2011 FF и Opera уже отключали поддержку вебсокетов из-за уязвимостей протокола. p.s.: чем не устраивают флешсокеты?
p.s.: ??? че то даже нагуглить нечего не могу . что это ? это предложение на action script перейти ? ps. Тут http://habrahabr.ru/company/microsoft/blog/130741/ сказано что сокеты появятся в ie 10
вот пишу websocket из за этих надуманных проблем безопасности протокол несколько раз изменили и сейчас заморочили что пипец. на сообщение нужно накладывать маску рукопожатие проходит успешно получение данных тоже проходит успешно, а вот с отправкой проблема Нашел две функции для кодирования hybi10Encode($data) и декодирования hybi10Decode данных. При отправка данных в браузер соединение сразу закрывается браузером. в консоли браузера тишина помогите разобраться с hybi10Encode($data) PHP: function hybi10Encode($data){ $frame = Array(); $mask = array(rand(0, 255), rand(0, 255), rand(0, 255), rand(0, 255)); $encodedData = ''; $frame[0] = 0x81; $dataLength = strlen($data); if($dataLength <= 125) { $frame[1] = $dataLength + 128; } else { $frame[1] = 254; $frame[2] = $dataLength >> 8; $frame[3] = $dataLength & 0xFF; } $frame = array_merge($frame, $mask); for($i = 0; $i < strlen($data); $i++) { $frame[] = ord($data[$i]) ^ $mask[$i % 4]; } for($i = 0; $i < sizeof($frame); $i++) { $encodedData .= chr($frame[$i]); } return $encodedData; } function hybi10Decode($data) { $bytes = $data; $dataLength = ''; $mask = ''; $coded_data = ''; $decodedData = ''; $secondByte = sprintf('%08b', ord($bytes[1])); $masked = ($secondByte[0] == '1') ? true : false; $dataLength = ($masked === true) ? ord($bytes[1]) & 127 : ord($bytes[1]); if($masked === true) { if($dataLength === 126) { $mask = substr($bytes, 4, 4); $coded_data = substr($bytes, 8); } elseif($dataLength === 127) { $mask = substr($bytes, 10, 4); $coded_data = substr($bytes, 14); } else { $mask = substr($bytes, 2, 4); $coded_data = substr($bytes, 6); } for($i = 0; $i < strlen($coded_data); $i++) { $decodedData .= $coded_data[$i] ^ $mask[$i % 4]; } } else { if($dataLength === 126) { $decodedData = substr($bytes, 4); } elseif($dataLength === 127) { $decodedData = substr($bytes, 10); } else { $decodedData = substr($bytes, 2); } } return $decodedData; } ссылка по теме http://s247.codeinspot.com/q/2870253
Функции оказались рабочие. А так же стоит учесть что если браузер IE то соединение идет через флеш и первый запрос будет <policy-file-request/> На него надо ответить PHP: $policy = '<?xml version="1.0"?>' . "\n"; $policy .= '<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">' . "\n"; $policy .= '<cross-domain-policy>' . "\n"; $policy .= '<allow-access-from domain="*" to-ports="*"/>' . "\n"; $policy .= '</cross-domain-policy>' . "\n";
1) на чистом С ??? Может тогда уж на асемблере?? 2) Думаю любой вебмастер знает php. А сколько вебмастеров знает C ? 3)Тот кому понадобиться WS будет его тюнить под себя (ну не будет же он только эхо тестом пользоваться)
Можно и на ассемблере ) я сокеты и серверы писал Нормально пхп знают не многие, ИМХО их меньше чем нормальнознающих С-программеров. Ну а что этот вэбсокет сможет? RAW-пакеты, неблокирующие сокеты и т.д?
это конечно делать никто не будет. но я о том. что можно запилить какую нить либу. для работы с разными штуками типа ws,proxy,webmoney и так далее. не кучу всего отдельно чтобы искать а скачал и готово. все что хочешь.