恩~為了幫我的 prueMVC 的作測試!
尋找多種不同 伺服器端是很重要的!
這次的目標是 Socket 伺服器
恩~不過這個有很多的問題~
第一個
遇上的就是 PHP 不支援的部分~
首先看 php 的 info
如果
Sockets Support enabled
這樣就 OK了~如果沒有
那請到 php.ini
去修改 extension=php_sockets.dll 把這個的# 用掉
這樣就可以成功的寫出 PHP的程式了
第二個
就是執行的問題
根據 因為是伺服器的關係~
不太建議大家使用 網頁去開~
特別是沒改限制時間的
比較建議使用 命令列的方式去開
像我在這會遇上一個問題就是
php_exif.dll 會說有問題 (或是 沒找到)
基本上~你只要修改一下順序就可以了
把 extension=php_exif.dll 移到
extension=php_mbstring.dll 的後面
重開一次 伺服器~
就可以正常執行了
3. 程式的部分!
因為我PHP只會一點點~
所以這邊 99% 都是照抄的
這個網站教PHP Socket 的部分我覺得蠻詳細的
一開始我都是照這個去建構~
基本上 只要照作範例是跑得起來的
不過會遇上防火牆的問題
4.
如果遇上防火牆的問題
這邊就是需要你把防火牆打開
怎樣判斷是否式防火牆的問題!
如果你 網址 PORT都設定正確~
伺服器也跑起來了
但是 你使用 CLIENT 沒有出現任何的回應
在你伺服器端的畫面上
那應該是防火牆的問題~
記得按照你寫的PROT 和 TCP UCP去開~
而且要開兩個~一個傳出 一個傳入~
5.
一個多人架構的 PHP 伺服器
PHP+Flex实现多人聊天(berrywu寫的)
他的這個 伺服器只能在 DEBUG的情況下使用
當然是以WEB的FLASH來說~
用AIR也是可以正常執行~不過要雙開有點麻煩~
然後這個在ADOBE中有一個範例 是解決安全性問題的SOCKET的策略
不過不記得網址了
我修改 (berrywu的) 伺服器 只要在他的
function readFromSocket( $clientId ){
中加入一段就可以解決
基本加完的結果如下
function readFromSocket( $clientId ){
// start with empty string
$data = "";
// 新增安全規則的部分!
$buf2 = socket_read( $this->clientFD[$clientId], $this->readBufferSize );
if(strpos($buf2,'policy-file-request')){
$msg ="<cross-domain-policy><allow-access-from domain='*' to-ports='*' /></cross-domain-policy>";
socket_write($this->clientFD[$clientId], $msg."\0", strlen($msg."\0"));
}
// read data from socket
while( $buf = socket_read( $this->clientFD[$clientId], $this->readBufferSize ) ){
$data .= $buf;
$endString = substr( $buf, - strlen( $this->readEndCharacter ) );
if( $endString == $this->readEndCharacter )
break;
if( $buf == NULL )
break;
}
if( $buf === false ) $this->sendDebugMessage( "Could not read from client2 ".$clientId." ( ".$this->getLastSocketError( $this->clientFD[$clientId] )." )." );
return $data;
}
好了到此算是完全結束~
當然你也可以使用 (berrywu的) 範例做一下試驗!
不過我等等來看看 zend 有沒有這方面的東東~
忘了一開始使就去查 orz
沒有留言 :
張貼留言