所以我一直在試圖讓我的帆布遊戲在長時間輪詢現在連接到我的mysql數據庫的實時多人遊戲中工作,但我現在試圖切換到網絡套接字。我對存儲信息的websockets的位置以及存儲信息時的組織方式有點困惑。網絡套接字連接到MySQL服務器?當服務器重置時,使用websocket存儲的信息是否會重置?任何幫助表示讚賞。謝謝與mysql的websocket連接
回答
免責聲明:本答案針對OP的評論。所提供的腳本決不是安全的。最好使用像Ratchet
這樣的第三方固件我認爲你誤解了PHP的工作原理。我給大家舉一個例子,並建立從一些解釋...
你有一個web服務器(example.com)有2個文件:a.php只會和b.php。
a.php只會
<?php
$varA = "I'm var A";
echo $varA;
b.php
<?php
echo $varA;
到a.php只會你直接在瀏覽器中運行http://example.com/a.php腳本。輸出是:
我風險價值
但是要http://example.com/b.php將打印公告稱
注意:未定義的變量:翻在/路徑/到/根目錄/ B .php on line 2
這是爲什麼?
這是因爲兩個腳本完全獨立。他們甚至不知道彼此的存在。
現在,讓我們改變b.php了一下:
b.php
<?php
include 'a.php';
echo $varA;
輸出:
我變種A我VAR一個
這基本上告訴b.php包含a.php,從而「共享」變量,對象,類和函數定義。
POST和GET
另一種方式來傳遞腳本之間數據使用POST或GET。
c.php
<?php
if (isset($_GET['c']) {
$varC = $_GET['c'];
} else {
$varC = 'NONE';
}
echo $varD;
NONE
要http://example.com/c.php?c=something將輸出
東西
從d.php傳遞一個變量來c.php。您可以使用GET請求。
d.php
<?php
$varD = urlencode("i'm from d");
echo "<a href=\"http://example.com/c.php?c=$varD\">pass value</a>";
或
header('Location: http://example.com/c.php?c='.urlencode("i'm from d"));
要d.php並點擊通值將輸出
i。從d是
而不是使用GET你可以做一個POST請求。(我們將討論這個版本)
$ _SESSION
約之間的 「訪問」 是什麼?
每次訪問php文件時,腳本都會從頭到尾運行。
這裏的另一個文件(e.php)
<?php
if (!isset($i)) {
$i = 0;
}
++$i;
該腳本會告訴你,如果沒有定義變量$ I,$ I = 0,然後由一個遞增它。
訪問http://example.com/e.php將始終輸出1.在訪問之間不存儲數據。
除非...您使用$ _SESSION變量(或將數據存儲在持久性媒體中)。
ii.txt
0
e.php
<?php
session_start();
if (!isset($_SESSION['i'])) {
$_SESSION['i'] = 0;
}
++$_SESSION['i'];
$ii = file_get_contents('ii.txt');
++$ii;
file_put_contents('ii.txt', $ii);
echo "session counter: " . $_SESSION['i'];
echo '<br/>';
echo "file counter: " . $ii;
每次訪問e.php時,兩個計數器將增加。
但是... $ _SESSION變量不是一個持久性媒體。當會話被破壞(或到期)時,會話計數器將重置。但是,文件計數器總是會增加,所以它是一個持久性媒體。當然,您可以使用數據庫來存儲變量。原理是一樣的。不同服務器之間
傳遞變量:
的原則,在同一服務器上的文件之間傳遞變量時是一樣的。但是,您不能(通常)包含或需要位於另一臺服務器中的php文件。此外,從兩個地點發送信息以保護數據時最好。這是一個使用套接字連接的例子。
a.php只會(位於client.com)
<?php
//Our Data
$dataArray = array('foo' => 'some data', "bar" => 42);
// Data convertion into URL parameters -> foo=some%20data&bar=42
$data = http_build_query($dataArray);
//extract the parts of the url
$url = parse_url("http://server.com/b.php");
$host = $url['host']; //server.com
$path = $url['path']; //b.php
$fp = fsockopen($host, 80, $errno, $errstr, 30);
if ($fp) {
//HEADERS
fputs($fp, "POST $path HTTP/1.1\r\n"); //POST method
fputs($fp, "Host: $host\r\n"); //The host
fputs($fp, "Referer: myApp\r\n"); //who's the referer
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n"); //Content type: a form post that is url encoded
fputs($fp, "Content-length: ". strlen($data) ."\r\n"); //data length (size in chars)
fputs($fp, "Connection: close\r\n\r\n");
//DATA
fputs($fp, $data);
$result = '';
// Request result
while(!feof($fp)) {
$result .= fgets($fp, 128);
}
} else {
// Something went bad
echo "ERROR: $errstr ($errno)";
}
// Socket close
fclose($fp);
//SUCCESS
// split the result header from the content
$result = explode("\r\n\r\n", $result, 2);
$header = isset($result[0]) ? $result[0] : '';
$content = isset($result[1]) ? $result[1] : '';
echo "HEADER: $header<br><br>";
echo "CONTENT:<br>$content";
b.php(位於server.com)
<?php
header('Content-type: text/plain');
if (isset($_POST)) {
file_put_contents('data.txt', $_POST, FILE_APPEND);
file_put_contents('data.txt', PHP_EOL, FILE_APPEND);
print file_get_contents('data.txt');
} else {
echo "NOT OK";
}
要http://client.com/a.php當POST請求被髮送至b。 PHP。如果成功,b.php將數據存儲在一個名爲data.txt的文件中,並返回該文件的內容。
希望這有助於理解套接字和PHP。
您的帖子是非常困惑。
與長輪詢現在它連接到我的MySQL數據庫
AFAIK有從瀏覽器到MySQL數據庫沒有直接的橋樑 - 因爲你已經標記這是PHP中,我認爲有一個腳本之間。
其中存儲信息
的WebSockets不存儲信息的WebSockets它們是用於傳送數據的管道。
Websocket連接到MySQL服務器嗎?
不 - 您還需要介於兩者之間。即使yopu可以在JavaScript中實現MySQL協議,也不會以這種方式訪問數據庫 - websockets通過基於流(TCP)的連接來隧道傳輸基於數據報的協議。至於在兩者之間應該是什麼,PHP是可以成爲解決方案的一部分。
有很多websocket服務器/適配器,其中許多都在PHP中實現o支持PHP後端 - 嘗試使用Google搜索並閱讀示例代碼。
當服務器重置時,使用websockets存儲的信息是否會重置?
請參閱上述 - websockets不存儲信息。
將信息從一個php文件傳輸到另一個文件時,數據傳輸如何工作?通常情況下,數據庫作爲中間的東西,但在這種情況下,我不確定。 – user1754830
它不會......除非在同一個腳本中調用這兩個文件。 – Tivie
使用網絡套接字讓我們說我創建一個變量存儲字符串hello世界。使用網絡套接字我應該能夠在任何瀏覽器/計算機上異步更改此變量,即使基礎是PHP正確的?對不起,我很新,這個 – user1754830
- 1. 建立與WebSocket的連接
- 2. 與郵差的Websocket連接
- 3. websocket未連接
- 4. WebSocket連接。 Android
- 5. WebSocket連接
- 6. WebSocket連接AWS
- 7. Heroku的WebSocket連接
- 8. PHP websocket服務器和mysql連接
- 9. 與PHP的Websocket安全(wss)連接
- 10. websocket與vaadin的連接失敗
- 11. 關閉與Java的websocket連接
- 12. JavaScript的WebSocket連接的readyState = 0與服務器的連接
- 13. 與連接MySQL的
- 14. WebSocket連接超時
- 15. Websocket連接設置
- 16. Firefox Websocket雙連接
- 17. WebSocket連接和Tritium
- 18. Pusherapp/Websocket未連接
- 19. 多個websocket連接
- 20. Arduino WebSocket客戶端連接問題與node.js ws websocket服務器
- 21. 計算WebSocket連接的Ping?
- 22. 連接Android與MySQL
- 23. 連接mysql與c#
- 24. nodejs-websocket檢測非websocket連接嘗試
- 25. 無法通過websocket連接連接
- 26. 與MySQL連接的問題
- 27. Crystal report4.6.1.0與Mysql的連接
- 28. Android與MySQL的連接
- 29. 與MySQL的SSH連接
- 30. 與DBVisualizer的MySQL連接
Websockets只是一種打開瀏覽器和服務器之間的雙向通信的方式,它不存儲任何東西。 – adeneo
好吧,它的工作原理與php中的memcache類似嗎? Web套接字是否在某種意義上創建全局持久會話變量? – user1754830
這只是客戶端和服務器之間的持續連接。 Websockets實際上被W3C定義爲一個API。 API不存儲任何東西,它們只是提供一個信息交換的接口。 –