gpt4 book ai didi

javascript - 使用 MySql 和 Websocket 协议(protocol)在 Perl 中创建一个小时

转载 作者:行者123 更新时间:2023-12-01 17:17:08 25 4
gpt4 key购买 nike

下午好,我正在使用 Mysql 和 Websocket 协议(protocol)在 Perl 中编写聊天。我正在使用 AnyEvent 模块和 Protocol::WebSocket。

我知道为此使用 Mojo 或 Node.js 会更好,但就我而言,它需要那样。

我从 Websocket 接收数据,反向并连接。输入字段中输入的数据也适合数据库。我的问题是现在如何将这些数据实时输出到 Web 界面。

#!/usr/bin/env perl

use strict;
use warnings;

use AnyEvent;

use AnyEvent::Handle;

use AnyEvent::DBI::MySQL;

use AnyEvent::Socket;
use Protocol::WebSocket::Handshake::Server;

use Protocol::WebSocket::Frame;

my $dbh = AnyEvent::DBI::MySQL->connect("DBI:mysql:chat:localhost", "admin", "admin",
{
mysql_enable_utf8 => 1,
PrintError => 0,
}) or die;

my $cv = AnyEvent->condvar;

my $hdl;
my $sth;

AnyEvent::Socket::tcp_server undef, 3000, sub {
my ($clsock, $host, $port) = @_;

my $hs = Protocol::WebSocket::Handshake::Server->new;

my $frame = Protocol::WebSocket::Frame->new;

$hdl = AnyEvent::Handle->new(fh => $clsock);

$hdl->on_read(
sub {
my $hdl = shift;

my $chunk = $hdl->{rbuf};

$hdl->{rbuf} = undef;

if (!$hs->is_done) {
$hs->parse($chunk);

if ($hs->is_done) {

$hdl->push_write($hs->to_string);
return;
}
}

$frame->append($chunk);

my $message = $frame->next;

if ($message eq ""){
$message = undef;
} else {
$sth = $dbh->do("INSERT INTO web_chat VALUES('$message')", { async => 0 });
}

my $ary_ref = $dbh->selectcol_arrayref("SELECT text FROM web_chat");

}
);
};

$cv->wait;

1;

客户端不是用Javascript写的


<!doctype html>
<form name="publish">
<input type="text" name="message" maxlength="50"/>
<input type="submit" value="Send"/>
</form>

<div id="messages"></div>

<script>

let socket = new WebSocket('ws://192.168.1.1:3000/websocket/');

// отправка сообщения из формы
document.forms.publish.onsubmit = function() {
let outgoingMessage = this.message.value;

socket.send(outgoingMessage);
return false;
};

socket.onopen = function () {
console.log("Websocket Connection");
};

socket.onerror = function () {
console.log("Error websocket connection ");
}

// прослушка входящих сообщений
socket.onmessage = function(event) {
let incomingMessage = event.data;
showMessage(incomingMessage);
};

socket.onclose = event => console.log(`Closed ${event.code}`);

// отображение информации в div#messages
function showMessage(message) {
let messageElem = document.createElement('div');
messageElem.textContent = message;
document.getElementById('messages').prepend(messageElem);
}

</script>

最佳答案

我可以为此推荐 Mojolicious 和 Mojo::Mysql 吗?

Protocol::WebSocket 非常“简单”,不会处理很多协议(protocol)细节,例如 ping/pong。

关于javascript - 使用 MySql 和 Websocket 协议(protocol)在 Perl 中创建一个小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61799831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com