nodejs 如何生成有logal 的nodejs 二维码识别

nodejs中有类似变量锁的东西么!! - CNode技术社区
这家伙很懒,什么个性签名都没有留下。
RTRTRT,在对一个变量进行操作的时候保证程序其他部分不能修改!
node中都是单线程的,要锁干神马?
单线程这个point很重要。感觉很多编程手法都因此而变了。
你问的是这个吗?
var obj = { greeting : &Hi!& };
Object.freeze(obj);
Object.isFrozen(obj); // true
是这样,我建立了一个socket连接,当有sock.on(‘data’, function(data) {…})时,我先把数据保存到内存,同时在这个连接内,还有一个定时器,一定时间将接受到的数据保存到数据库;sock.on()和setInterval(save, 30000);同时会用到一个标志量,我需要保证在sock.on()和setInterval其中一个用到改变标志量时,另一个不能改变~~
是这样,我建立了一个socket连接,当有sock.on(‘data’, function(data) {…})时,我先把数据保存到内存,同时在这个连接内,还有一个定时器,一定时间将接受到的数据保存到数据库;sock.on()和setInterval(save, 30000);同时会用到一个标志量,我需要保证在sock.on()和setInterval其中一个用到改变标志量时,另一个不能改变~~
用Object.freeze()锁定对象后,突然又想修改这个对象,咋解锁啊?
都说了,是单线程的,没有“同时”修改的情况!
sock.on 跟setInterval 都用到这个标志量,问题是有没有可能&同时会用到一个标志量&? 如果考虑到单线程的特性,好像不大可能“同时用到”
注意node的单线程特点,在sock.on和setInterval 执行的时候,并不会再触发其他的sock.on和setInterval,换句话说,所有的任务都是串行的,不会出现你所说的“其中一个用到改变标志量时,另一个改变”的情况
还真就不知道了
单线程变量没关系,如果要用到文件锁,并且通过cluster.fork()启动了cpu个数量的子进程,这样文件应该有同时的情况
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
服务器赞助商为
,存储赞助商为
,由提供应用性能服务。
新手搭建 Node.js 服务器,推荐使用无需备案的1794人阅读
问题及方案
,关于如何在模块间共享常量。
为了叙述方便,我们用 const.js 代表定义常量的文件, main.js 表示主文件。
下面是一些总结:
1. 用global来保存常量
global.MY_CONST= 'global const';
技术上可以,你只需要 require
const.js,无需保存返回值
require('./const');
console.log(global.MY_CONST);
global.MY_CONST = 'changed global const';
console.log(global.MY_CONST);
但是设计原则上来讲,应该将内容封装到文件内,通过exports导出。
而且,这种方式并不能定义常量。
2. 直接export一个包含常量的对象
const obj = {
MY_CONST:'my const'
module.exports =
这种方式有同样的问题,const并不能定义一个属性无法修改的对象,MY_CONST依然是可以修改的。
3. 用Object.defineProperty来定义常量
上面的方法试图定义一个const对象,但这是不可能的。但是我们可以通过配置将对象属性的设定为不可修改的。
Object.defineProperty(exports, "PI", {
enumerable:
configurable: false
writable和configurable默认是false,所以可以简化一下
Object.defineProperty(exports, "PI", {
value:3.14,
enumerable:true
更好的方式,如果你不想为每一个属性都手写配置的话:
function define(name, value) {
Object.defineProperty(exports, name, {
enumerable: true
define("PI", 3.14);
看起来更舒服了。
4. 通过 Object.freeze 来固定属性值
module.exports = Object.freeze({
MY_CONSTANT: 'some value',
ANOTHER_CONSTANT: 'another value'
freeze的简单介绍,来自 :
The Object.freeze() method freezes an object: that is, prevents new properties fr prevents existing propertie and prevents existing properties, or their enumerability, configurability, or writability, from being changed. In essence the object is made effectively immutable. The method returns the object being frozen.
大概意思是说,freeze能够阻止对象属性的添加,删除,以及属性的enumerable, writable,configurable的修改,也就是将此对象变成一个不可变对象。
想必前一种方案,这种更简单,更安全(因为阻止了对属性writable的修改,所以也不担心某些别有用心的人修改了常量的writable后,再进一步修改属性值)。
关于共享常量,本文中并没有给出方案,事实上nodejs也不建议这样做。所以,需要使用常量的module,必须require一下。其实也不费什么事。而且干净清新。如果未来有多个常量文件,也可以按需导入。
尘埃落定,我已经开始依照第4种方案来编写项目的常量js文件了,但是稍微纠结了一下这个文件的存放目录,下面是我司的项目目录
|-controllers
|-services
常量文件一般是不容易修改的文件,同事建议放到conf目录中,但是目前conf目录存放的都是一些底层配置,比如数据库连接信息,代理信息,文件系统信息。等等。业务使用的常量如果放在conf下,隐隐的觉得有点奇怪。
经过讨论,暂定存放在services中,因为主要也是service来使用这些常量。
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:16622次
排名:千里之外
原创:36篇
(1)(2)(3)(4)(6)(2)(1)(2)(3)(2)(3)(1)(1)(1)(1)(1)(3)今天网站后台登录页面需要生成一个二维码,然后在手机app上扫描这个二维码,实现网站登录的效果及其解决方案如下
时间: 16:07:54
&&&& 阅读:1074
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&要实现二维码登录,需要解决2个技术,1、需要js websocket 与后台php实现长连接技术
2、实现二维码生成技术
要实现这个功能第二个算是比较简单,只需要下载一个php的二维码生成器即可,但要实现长连接技术,经过多方查资料,有2中方式 1种是nodejs来实现后台服务,另外一种是 利用php的一个扩展 swool来实现后台服务,本例采用的是后者swool,
第一步,在打开登录页面的时候,利用php生成一个唯一 sign,用js的websocket技术连接上后台服务,并且把sign发送给后台服务,同时利用sign生成二维码
第二步,后台服务在收到这个sign后,把sign和当店socket的client端绑定第三步、利用app端的二维码工具扫描二维码,活动用sign生成的一段字符串,并把这个字符串和当前登录的用户信息,通过接口调用传递到后台
第四步、服务端接口 收到信息后,对sign和用户信息做校验,校验无误后,在发送socket消息 到后台服务上,后台服务收到消息 查找sign对应的客户端,并且发送消息到客户端,确认登录
第五步、登录页面收到确认登录的消息后 ,传到sign到登录页面
第六步、php登录页面收到sign后,验证sign,确定登录
&标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:/niun/p/5130374.html
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!WEB技术(30)
当我们写了个NodeJS程序的时候,一般用node yourjsfile.js命令启动该程序。但是如果程序中有东西出错,这个进程就会退出。我们写程序不可能保证万无一失,肯定有些没有处理的错误,这就让很多人觉得NodeJS不稳定,容易产生很多故障。 下面我就讲讲几种方法增加你的NodeJS程序的稳定性。
1.使用 try{…} catch(error){…} 来执行容易出错的代码段。比如解析一个外来的json字符串等。
2.使用 process.on('uncaughtException’, function(err){…}); 来处理未被捕捉的错误。
3.试用奶妈进程来启动你的程序,检测子进程的退出,然后自动重启该进程。比如 mother.js :
function start()
console.log(‘Mother process is running.’);
var ls = require(‘child_process’).spawn('node’, [‘server.js’]);
ls.stdout.on('data’, function (data)
console.log(data.toString());
ls.stderr.on('data’, function (data)
console.log(data.toString());
ls.on('exit’, function (code)
console.log('child process exited with code ' + code);
delete(ls);
setTimeout(start,5000);
4.使用 nohup 让nodejs进程在后台运行。 比如运行&nohup node yourjsfile.js & /dev/null &&
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1132972次
积分:12008
积分:12008
排名:第1159名
原创:70篇
转载:411篇
评论:146条
(15)(1)(20)(4)(13)(7)(12)(8)(5)(1)(4)(7)(5)(3)(8)(3)(1)(4)(4)(1)(3)(8)(5)(3)(1)(3)(3)(4)(7)(21)(3)(11)(6)(1)(2)(13)(8)(11)(6)(12)(26)(7)(16)(5)(13)(1)(2)(13)(6)(4)(8)(11)(4)(2)(9)(1)(1)(1)(3)(2)(5)(4)(3)(1)(1)(1)(6)(1)(1)(1)(3)(6)(2)(5)(2)(6)(1)(2)(3)(7)(6)(12)(1)(3)(12)(15)(5)}

我要回帖

更多关于 nodejs生产二维码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信