首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >节约nodejs客户端和php服务器一起工作?

节约nodejs客户端和php服务器一起工作?
EN

Stack Overflow用户
提问于 2016-04-14 05:50:21
回答 2查看 1.2K关注 0票数 0

我计划使用nodejs作为客户端,使用php作为服务器。我使用官方的tutorial.thrift

我设置了一个nginx服务器来使用dir /path/to/my/tutorial/来承载/path/to/my/tutorial/,生成一个服务器脚本作为index.php,并在访问localhost:9099时将它放置在根中,这样客户端就可以通过index.php访问服务器。index.php内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

error_reporting(E_ALL);

require_once __DIR__ . "/Thrift/ClassLoader/ThriftClassLoader.php";
use Thrift\ClassLoader\ThriftClassLoader;

$ROOT = realpath(dirname(__FILE__));
$GEN_DIR = $ROOT.'/gen-php';

$loader = new ThriftClassLoader();
$loader->registerNamespace('Thrift', $ROOT);
$loader->registerNamespace('Swoole', $ROOT);
$loader->registerNamespace('tutorial', $GEN_DIR);
$loader->registerDefinition('shared', $GEN_DIR);
$loader->registerDefinition('tutorial', $GEN_DIR);
$loader->register();

if (php_sapi_name() == 'cli') {
    ini_set("display_errors", "stderr");
}

use Thrift\Protocol\TBinaryProtocol;
use Thrift\Transport\TPhpStream;
use Thrift\Transport\TBufferedTransport;
use Thrift\Server\TServer;

header('Content-Type', 'application/x-thrift');
if (php_sapi_name() == 'cli') {
    echo "\r\n";
}

$handler = new \tutorial\Handler();
$processor = new \tutorial\CalculatorProcessor($handler);

$transport = new TBufferedTransport(new TPhpStream(TPhpStream::MODE_R | TPhpStream::MODE_W));
$protocol = new TBinaryProtocol($transport, true, true);

$transport->open();
$processor->process($protocol, $protocol);
$transport->close();

client.node.js内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Created by Kron on 16/4/12.
 */
var thrift = require('thrift');
var ThriftTransports = require('thrift/transport');
var ThriftProtocols = require('thrift/protocol');
var Calculator = require('../gen-nodejs/Calculator');
var ttypes = require('../gen-nodejs/tutorial_types');

transport = ThriftTransports.TBufferedTransport();
protocol = ThriftProtocols.TBinaryProtocol();


var connection = thrift.createConnection("localhost", 9099, {
    transport : transport,
    protocol : protocol
});

var client = thrift.createClient(Calculator, connection);


connection.on('error', function(err) {
    console.log(err);
    //assert(false, err);
});

// Create a Calculator client with the connection

client.ping(function(err, response) {
    console.log('ping()');
});

client.add(1,1, function(err, response) {
    console.log("1+1=" + response);
});

work = new ttypes.Work();
work.op = ttypes.Operation.DIVIDE;
work.num1 = 1;
work.num2 = 0;

client.calculate(1, work, function(err, message) {
    if (err) {
        console.log("InvalidOperation " + err);
    } else {
        console.log('Whoa? You know how to divide by zero?');
    }
});

work.op = ttypes.Operation.SUBTRACT;
work.num1 = 15;
work.num2 = 10;

client.calculate(1, work, function(err, message) {
    console.log('15-10=' + message);

    client.getStruct(1, function(err, message){
        console.log('Check log: ' + message.value);

        //close the connection once we're done
        connection.end();
    });
});

client.php内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

error_reporting(E_ALL);

require_once __DIR__ . "/../Thrift/ClassLoader/ThriftClassLoader.php";
use Thrift\ClassLoader\ThriftClassLoader;

$ROOT = realpath(dirname(__FILE__).'/../');
$GEN_DIR = $ROOT.'/gen-php';

$loader = new ThriftClassLoader();
$loader->registerNamespace('Thrift', $ROOT);
$loader->registerNamespace('Swoole', $ROOT);
$loader->registerNamespace('tutorial', $GEN_DIR);
$loader->registerDefinition('shared', $GEN_DIR);
$loader->registerDefinition('tutorial', $GEN_DIR);
$loader->register();

use Thrift\Protocol\TBinaryProtocol;
use Thrift\Transport\TSocket;
use Thrift\Transport\THttpClient;
use Thrift\Transport\TBufferedTransport;
use Thrift\Exception\TException;

try {
    if (array_search('--http', $argv)) {
        $socket = new THttpClient('localhost', 9099, '/clients_servers/tutorial.server.php');
    } else {
        $socket = new THttpClient('localhost', 9099); // 8080 for node server, 9099 for php server
    }

    $transport = new TBufferedTransport($socket, 1024, 1024);
    $protocol = new TBinaryProtocol($transport);
    $client = new \tutorial\CalculatorClient($protocol);

    $transport->open();

    $client->ping();
    print "ping()\n";

    $sum = $client->add(1,1);
    print "1+1=$sum\n";

    $work = new \tutorial\Work();

    $work->op = \tutorial\Operation::DIVIDE;
    $work->num1 = 1;
    $work->num2 = 0;

    try {
        $client->calculate(1, $work);
        print "Whoa! We can divide by zero?\n";
    } catch (\tutorial\InvalidOperation $io) {
        print "InvalidOperation: $io->why\n";
    }

    $work->op = \tutorial\Operation::SUBTRACT;
    $work->num1 = 15;
    $work->num2 = 10;
    $diff = $client->calculate(1, $work);
    print "15-10=$diff\n";

    $log = $client->getStruct(1);
    print "Log: $log->value\n";

    $transport->close();

} catch (TException $tx) {
    print 'TException: '.$tx->getMessage()."\n";
}

它们和原版差不多。

  1. 当我使用client.php访问主机时,它工作得很好。
  2. 当我使用client.node.js访问主机时,它不起作用。
  3. 当我尝试使用节点服务器而不是主机时,使用client.php访问它,我必须将$socket = new THttpClient('localhost', 9099)更改为$socket = new TSocket('localhost', 9099)以使其工作。
  4. client.node.js从来没有碰过localhost:9099,而且没有任何标准。
EN

回答 2

Stack Overflow用户

发布于 2016-04-15 00:30:47

最后我的搭档帮我找到了答案。

nodejs的官方演示有一些问题:

官方代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
transport = ThriftTransports.TFramedTransport();
protocol = ThriftProtocols.TBinaryProtocol();

我们的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
transport = ThriftTransports.TFramedTransport;
protocol = ThriftProtocols.TBinaryProtocol;

删除(),这将使代码工作。

票数 1
EN

Stack Overflow用户

发布于 2017-03-09 10:20:51

hbase/bin/HBASE-daemon.sh启动节俭-f

我也面临着同样的错误。默认情况下,http://dailyjs.com/post/hbase TFramedTransport是禁用的。您必须使用上面的命令来启用它。注意:启用之后,您无法连接php。我在php中使用不同的协议。

检查这个:NodeJS Hbase节俭怪异

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36625190

复制
相关文章
Jupyter Notebook 更改主题
Customize your Jupyter Notebook Theme in 2 lines of code
莫听穿林
2022/02/16
8210
Jupyter Notebook 更改主题
更改WordPress主题全局字体
加入以下自定义CSS即可 /* 您可以在此处加入您的CSS。 点击上方的帮助图标来了解更多。 */ /*字体设定*/ *:not([class*="icon"]):not(i) { font-family: "Helvetica Neue", "Luxi Sans", "DejaVu Sans", Tahoma, "Hiragino Sans GB", "Microsoft Yahei", sans-serif !important; } /*字体阴影*/ *{text-shadow: 0
回忆大大
2021/08/09
1.2K0
更改WordPress主题全局字体
pycharm 风格_python主题更改
下载好的插件是一个zip文件,在pycharm的Plugins栏中选择install plugins from disk,选择插件后重启即可
全栈程序员站长
2022/09/27
7690
pycharm 风格_python主题更改
WordPress 3.4 发布:自定义主题变得更加容易
WordPress 发布了 3.4 版本,这个版本显著改善了 WordPress 的主题定制功能,自定义头部,以及图片标题等方面。
Denis
2023/04/14
2560
WordPress 3.4 发布:自定义主题变得更加容易
wordpress子比主题更改首页样式全宽度[美化教程]
在主题目录下“func.php”下面添加下面代码,这是我修改后的“图文封面卡片”小工具
七辰
2023/10/06
1.7K0
wordpress子比主题更改首页样式全宽度[美化教程]
更改Linux终端颜色主题【Linux-Command line】
如果你一整天都盯着终端,自然想让它变得赏心悦目。 对美的判断因人而异,自CRT串行控制台问世以来,终端已经走了很长一段路。 因此,很有可能你的软件终端窗口中有很多选项可以使你看到的内容主题化,不管你如何定义美。
QRosie
2019/11/24
9K0
更改Linux终端颜色主题【Linux-Command line】
gnome extensions 推荐 (fedora 28 常用gnome 插件备份)
当我们进行重新安装系统(fedora 28)的时候,需要初始安装一些 gnome 插件,来进行完善我们的使用。
西湖醋鱼
2020/12/30
3.8K0
安装Gnome桌面
sudo add-apt-repository ppa:tualatrix/ppa sudo apt-get install -f gnome-panel gnome gnome-shell gnome-menus gnome-session gdm
JNingWei
2018/09/28
4.4K0
【Matlab】MATLAB编辑器主题颜色更改(MATLAB Schemer)
MATLAB是一款好用的代码编辑器,但其默认的主题背景色是“刺眼的白色”,对于经常使用MATLAB工作的童鞋来说很不友好。其他的代码编辑器如VS Code、Pycharm都有黑色背景主题设置。
DevFrank
2024/07/24
1.2K0
【Matlab】MATLAB编辑器主题颜色更改(MATLAB Schemer)
ubuntu 手工安装gnome extensions
首先查看gnome shell 的version gnome-shell --version GNOME Shell 3.28.4 下载对应的版本。 查看这个扩展的uuid: unzip -c ./openweather-extension@jenslody.de.v94.shell-extension.zip metadata.json | grep uuid | cut -d \" -f4 # openweather-extension@jenslody.de 进入目录安装扩展 mkdir -p ~/.
超级大猪
2019/12/20
2.4K0
技术|使用 Ansible 管理你的工作站:配置桌面设置
在本系列第三篇(也是最后一篇)文章中,我们将使用Ansible自动化配置GNOME桌面设置。
知忆
2021/07/06
8390
使用 Ansible 管理你的工作站:配置桌面设置
在本系列第三篇(也是最后一篇)文章中,我们将使用 Ansible 自动化配置 GNOME 桌面设置。
星哥玩云
2022/07/28
5760
Ubuntu14.04 gnome3下gedit首选项消失如何修改gedit主题
该文章介绍了在Ubuntu 14.04下使用gnome3遇到的问题以及解决方案。主要包括忘记选择引导设备导致硬盘被格式化的问题,以及使用easyBCD设置启动项进入Ubuntu后出现Grub error: unknown filesystem的问题。文章还介绍了如何手动更改引导文件,以及更改主题和显示行号的方法。
Alan Lee
2018/01/02
2K0
Ubuntu14.04 gnome3下gedit首选项消失如何修改gedit主题
这款Typora主题惊艳到了我
typora相信大家都用过,很多人习惯了typora默认的github主题,但我今天看到一个主题。说实话激起了我要设计自己的一款主题的欲望。就有了今天的这个主题。
徐建国
2021/12/22
1.4K0
这款Typora主题惊艳到了我
博客园美化,更改外部主题,自定义JavaScript
在之前,我一直以为博客园他是那种万年不变的老旧风格,看着就有一种年代感,但是,昨天我莫名看到一个项目,我尝试进行了美化后,发现这玩意很好看啊。
JanYork_简昀
2022/05/18
1.2K0
博客园美化,更改外部主题,自定义JavaScript
扶我起来,前端还没倒下,我不能睡
长路漫漫,唯夜作伴。虽然一天的工作头昏脑胀,但是仍然放不下我心心念念的前端啊,扶我起来,我还可以学~
小闫同学啊
2019/12/17
8300
使用GNOME Tweaks工具定制Linux桌面的10种方法
您可以通过多种方法来调整Ubuntu,以自定义其外观和行为。 我发现最简单的方法是使用GNOME Tweaks Tool(GNOME优化工具)。 它也被称为GNOME调整或简单的调整。GNOME Tweaks 是可以调整 GNOME 的高级选项。
知忆
2021/06/09
4.9K0
Qt设置窗口不能更改大小及程序发布相关
参考:http://blog.sina.com.cn/s/blog_5e42f31a0100y760.html
繁花云
2018/07/31
1.3K0
Qt设置窗口不能更改大小及程序发布相关
WSL安装GNOME桌面教程
下载 VcXsrv Windows X Server download | SourceForge.net 并安装
小N同学
2023/03/16
4.6K0
WSL安装GNOME桌面教程
3.4 队列
1、和栈相反,队列是一种先进先出(FIFO)的线性表。它只允许在表的一端进行插入,而在另一端删除元素。
小林C语言
2019/07/12
2940

相似问题

如何删除Ubuntu 12.04中的gnome 3.4主题

30

我想从toreturn 12.04的gnome 3.6返回gnome 3.4

10

如何手动更改GNOME主题?

10

Gnome shell主题自动更改

10

Gnome-Shell 3.4主题在12.04中不起作用?

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文