伙计们,我已经在我的网络项目上工作了很长时间。我现在正在创建一个实时通知系统,我正在使用 node js + socket io。我很高兴在 stackoverflow 专家的帮助下,我能够在不同的 port 上同时运行 apache server 和 nodejs server对于一个完整的 Web 应用程序。好的,现在让我们进入正题。
与我的逻辑人员一起,我试图通过两个步骤进行实时通知:-
1) 首先,用户通过客户端页面连接套接字,然后它发出 连接事件,该事件由我们的 nodejs 服务器文件处理。
2) 在检测到用户已连接到套接字后,我在 nodejs 中执行了一些 mysql 获取,使服务器文件如下:-
// ....all module are presented here above...
io.sockets.on('connection', function(client) {
var pool = mysql.createPool({
connectionLimit: 10,
host: "localhost",
user: "root",
password: "",
database: "mydatabase"
});
pool.getConnection(function(err, connection) {
var queryString = "Select * from table_one";
connection.query(queryString, function(error, results) {
if (error) {
throw error;
} else {
console.log("New client !");
io.sockets.emit('u_d', results);
}
});
connection.release();
});
});
上面我使用了 nodejs mysql 模块。它从该表名 table_one 中获取所有数据,数据类型为 json ,如图中所示以下。
你可以看到我在 json 类型上获取了我的数据。是否有可能使我的 json 数据以正确的格式获取,如下所示:-
{
"result": [{
"id": "2",
"user": "hari061",
"pic": "img.jpg"
},
{
"id": "3",
"user": "ram061",
"pic": "nature.jpg"
}
]
}
该 json 数据将在此处交给我的客户端:-
var socket = io.connect('http://localhost:3000');
socket.on('u_d', function(data) {
$('.display_noti').append($('<li style="margin-bottom:10px;margin-left:10px; margin-right:10px;">').text(data));
});
毕竟我发现了两个问题:-
1) 在用户的每个连接中 mysql 获取数据。(这意味着我的用户每次都应该连接到套接字以进行新的更新)。这不是实时的,我的意思是页面重新加载只能使该用户连接到套接字,然后才会显示他/她的新更新。
2) 正如我发现 mysql 获取的数据以 json 格式检索。我想控制适合我的 json 格式的结果客户端。
我怎样才能解决这两个问题?
最佳答案
如果您在服务器外部修改数据,您可以添加一些 RESTful API 来触发服务器更新数据:
# example with express.js
app.put '/newdata/', (req, res) ->
get_updated_data (result) ->
io.sockets.emit 'u_d', result # send new update to all connected clients
按照这种逻辑,当用户连接时,您应该将数据的“最后状态”发送给新客户端:
io.sockets.on 'connection', (client) ->
get_last_state (result) ->
client.emit 'last state', result # send last state to new client
一行简单的 JSON 格式化:
JSON.stringify jsonObject, null, '\t'
和here你可以阅读更多如何美化 JSON 字符串。
此外,如果您在 io 的connection 之外放置对 MySQL 的连接调用,您将在每次客户端连接到套接字时节省 MySQL 连接/断开连接的资源。
关于php - 如何创建从 nodejs mysql 模块获取的正确的 json 类型数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34834538/
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i