所以我一直在试图让我的帆布游戏在长时间轮询现在连接到我的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不存储任何东西,它们只是提供一个信息交换的接口。 –