显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 
 
 
 

关于MODBUS协议

2017-7-8 20:23:33 阅读49 评论0 82017/07 July8

(注:MODBUS是应用层的通讯协议,主要用于传送和接收文件包的格式。而RS232,RS485是物理层的串行接口)。

一 官方说明

Modbus是一种单主站的主/从通信模式。Modbus网络上只能有一个主站存在,主站在 Modbus网络上没有地址,从站的地址范围为 0 - 247,其中 0 为广播地址,从站的实际地址范围为 1 - 247。 Modbus通信标准协议可以通过各种传输方式传播,如 RS232C、RS485、光纤、无线电等。

Modbus具有两种串行传输模式,ASCII 和 RTU。它们定义了数据如何打包、解码的不同方式。支持 Modbus 协议的设备一般都支持 RTU 格式。通信双方必须同时支持上述模式中的一种。

二 直白说明

modbus协议也只是通讯协议的一种,没什么神秘的,通讯协议包括两个方面:

一、通讯格式,即: 波特率,检验方式,数据位,停止位 (类似HTTP协议)

波特率:一秒钟传送的位数,也就是通讯速率;比如波特率为9600,即,一秒种可以传送9600个位数。

校验方式:奇校验或偶校验或无校验,目的是判断传输过程中是否有错误!它只是用于判断一个字符(比如八个位或是七个位组成一个字符)传输是否有错误。但是它并不能完全能够判断传输是否有错。比如偶校验,在检验送八个“11111111”时,如果到达接收方,由于干扰而变成了“10111101”,“1”的个数仍然是偶数,接收方就判断不出来传送的字符已经错误!

数据位:传输一个字符由几个位

作者  | 2017-7-8 20:23:33 | 阅读(49) |评论(0) | 阅读全文>>

在电商系统中,到底要怎么扣减库存?

2017-6-14 23:30:28 阅读76 评论0 142017/06 June14

来源:58沈剑

业务复杂、数据量大、并发量大的业务场景下,典型的互联网架构,一般会分为这么几层:

调用层,一般是处于端上的browser或者APP

站点层,一般是拼装html或者json返回的web-server层

服务层,一般是提供RPC调用接口的service层

数据层,提供固化数据存储的db

对于库存业务,一般有个库存服务,提供库存的查询、扣减、设置等RPC接口:

库存查询,stock-service本质上执行的是

select num from stock where sid=$sid

库存扣减,stock-service本质上执行的是

update stock set num=num-$reduce where sid=$sid

库存设置,stock-service本质上执行的是

update stock set num=$num_new where sid=$sid

用户下单前,一般会对库存进行查询,有足够的存量才允许扣减:

如上图所示,通过查询接口,得到库存是5。

用户下单时,接着会对库存进行扣减:

如上图所示,购买3单位的商品,通过扣减接口,最终得到库存是2。

希望设计往往有容错机制,例如“重试”,如果通过扣减接口来修改库存,在重试时,可能会得到错误的数据,导致重复扣减:

如上图所示,如果数据库层面有重试容错机制,可能导致一次扣减执行两次,最终得到一个负数的错误库存。

作者  | 2017-6-14 23:30:28 | 阅读(76) |评论(0) | 阅读全文>>

MySQL常见SQL错误用法

2017-6-7 18:09:08 阅读59 评论0 72017/06 June7

来源:https://yq.aliyun.com/articles/72501

常见SQL错误用法1. LIMIT 语句

分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,一般DBA想到的办法是在type, name, create_time字段上加组合索引。这样条件排序都能有效的利用到索引,性能迅速提升。

de >SELECT * FROM operation WHERE type = 'SQLStats' AND name = 'SlowLog' ORDER BY create_time LIMIT 1000, 10; de>

好吧,可能90%以上的DBA解决该问题就到此为止。但当 LIMIT 子句变成 “LIMIT 1000000,10” 时,程序员仍然会抱怨:我只取10条记录为什么还是慢?

要知道数据库也并不知道第1000000条记录从什么地方开始,即使有索引也需要从头计算一次。出现这种性能问题,多数情形下是程序员偷懒了。在前端数据浏览翻页,或者大数据分批导出等场景下,是可以将上一页的最大值当成参数作为查询条件的。SQL重新设计如下:

de >SELECT * FROM operation WHERE type = 'SQLStats' AND name = 'SlowLog' AND create_time > '2017-03-16 14:00:00' ORDER BY create_time limit 10; de>

作者  | 2017-6-7 18:09:08 | 阅读(59) |评论(0) | 阅读全文>>

客户端(浏览器端)数据存储技术概览

2017-3-15 14:37:25 阅读114 评论0 152017/03 Mar15

在客户端(浏览器端)存储数据有诸多益处,最主要的一点是能快速访问(网页)数据。(以往)在客户端有五种数据存储方法,而目前就只有四种常用方法了(其中一种被废弃了):

CookiesLocal StorageSession StorageIndexedDBWebSQL (被废弃)[fc_lamp: 在基于WebKit 的浏览器是支持 sqllite操作]Cookies

Cookies 是一种在文档内存储字符串数据最典型的方式。一般而言,cookies 会由服务端发送给客户端,客户端存储下来,然后在随后让请求中再发回给服务端。这可以用于诸如管理用户会话,追踪用户信息等事情。

此外,客户端也用使用 cookies 存储数据。因而,cookies 常被用于存储一些通用的数据,如用户的首选项设置。

Cookies 的 基本CRUD 操作

通过下面的语法,我们可以创建,读取,更新和删除 cookies:

// Create

document.cookie = "user_name=Ire Aderinokun";

document.cookie = "user_age=25;max-age=31536000;secure";

// Read (All)

console.log( document.cookie );

// Update

document.cookie = "user_age=24;max-age=31536000;secure";

作者  | 2017-3-15 14:37:25 | 阅读(114) |评论(0) | 阅读全文>>

Linux 上传下载文件快捷方式

2017-2-23 16:46:58 阅读114 评论0 232017/02 Feb23

我们可以使用 rz 命令上传文件,sz 命令下载文件。

我们进入目标目录后,使用rz即可上传。

我们使用 sz /home/www/test.html 即可下载文件。

2017-04-19更新:

有时候我们装的linux系统中没有rz命令,我们只需要安装一下就行了

cd /mmz/tools

wget http://down1.chinaunix.net/distfiles/lrzsz-0.12.20.tar.gz

tar zxvf lrzsz-0.12.20.tar.gz

cd lrzsz-0.12.20

./configure --prefix=/usr/local/lrzsz

make

make install

cd /usr/bin 

ln -s /usr/local/lrzsz/bin/lrz rz #这里是加上命令链接

ln -s /usr/local/lrzsz/bin/lsz sz

rz

作者  | 2017-2-23 16:46:58 | 阅读(114) |评论(0) | 阅读全文>>

虚拟机(virtualbox) ping unknown host www.baidu.com 的问题

2017-2-22 17:23:45 阅读210 评论0 222017/02 Feb22

1 我们首先在虚拟机网络设置中选择“桥接网卡” 桥接模式。在选择驱动时,需要注意主机是使用的什么链网方式:

2 然后我们使用ping 8.8.8.8 (google 公共DNS) 命令检测能否正常访问外网,如果得到:

connect: network is unreachable

说明访问不到外网,那么我们需要编辑 /etc/sysconfig/network-script/目录下的ifcfg-eth0文件

我们vim 进入/etc/sysconfig/network-scripts/ifcfg-eth0 加入如下代码:

通常情况下,我们只需要修改IPADDR值即可。 IPADDR的值是一个内网IP地址(使用一个没有占用的IP地址即可,你可以先在 主机上查看一下主机的IP,然后以此填写一个IP即可)。

保存后,我们执行:

service network restart    重启网络服务

我们还需要设置一下默认网关,执行

route add default gw 192.168.1.1

我们再使用route 命令即可查看到已有默认网关了,到这里我们在使用ping 8.8.8.8 查看网络是否已通(ifconfig 可查看当前IP)。

3 现在我们再来配置DNS,我们进入 vim  /etc/resolv.conf  添加:

nameserver 8.8.8.8

作者  | 2017-2-22 17:23:45 | 阅读(210) |评论(0) | 阅读全文>>

我们可直接修改AndroidManifest.xml 文件即可:

<activity

android:name=".MainActivity"

android:label="@string/app_name" >

<intent-filter>

<!-- 这里增加开机自启,并打开UI界面 -->

<category android:name="android.intent.category.HOME" />

<category android:name="android.intent.category.DEFAULT" />

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

作者  | 2017-2-21 18:45:08 | 阅读(98) |评论(0) | 阅读全文>>

JAVA android Crosswalk(XWalkView) 的使用 【实验】

2017-2-21 18:43:08 阅读115 评论0 212017/02 Feb21

1 在下载好XWalkView包并导入项目后。

2 我们新建一个android 项目。选中项目,打开properties,然后在Android中选中XWalkView项目即可。

<!-- 这里注掉android自带的web veiw

<WebView

android:id="@+id/webview"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_alignParentTop="true" >

</WebView>-->

<!-- 注意 id 中的名称 -->

<org.xwalk.core.XWalkView

xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/webview"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_alignParentTop="true" >

作者  | 2017-2-21 18:43:08 | 阅读(115) |评论(0) | 阅读全文>>

Android webView 无法打不开网页

2017-2-21 15:22:43 阅读151 评论0 212017/02 Feb21

有时候会出现一些很奇怪的问题,比如,webview 打不开百度网页,或者webview有时候加载不出网页,页面关掉再打开也不行,显示一片空白。放着不动,过一会,反而能打开网页。

方案一 :直接添加如下代码

webView.getSettings().setDomStorageEnabled(true);

方案二:使用log调试,查看请求情况...

de >webView.setWebViewClient(new WebViewClient() {

@Override

public void onPageStarted(WebView view, String url, Bitmap favicon) {

//页面开始加载

}

@Override

public void onPageFinished(WebView view, String url) {

//页面加载完毕

}

@Override

public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {

//加载出现失败

super.onReceivedError(view, errorCode, description, failingUrl);

作者  | 2017-2-21 15:22:43 | 阅读(151) |评论(0) | 阅读全文>>

JAVA android Crosswalk(XWalkView) 的使用

2017-2-21 12:44:35 阅读131 评论0 212017/02 Feb21

原:http://www.cnblogs.com/ct2011/p/4100132.htmlCrosswalk入门CSDN资讯:Crosswalk的介绍

Crosswalk官方地址

上面的链接可以看到Crosswalk的介绍,Crosswalk种种吹牛逼的描述我就不写了。

写一下我的使用感受:

不用费力搞什么自己封装了,直接像用WebView一样使用。

在使用android-chromium这个库时,不仅要自己封装API来方便使用,还要操心Chromium的初始化,甚至还需要在清单文件里写一堆关于Chromium的东西,用来帮助Chromium建立单独的进程(Crosswalk只会创建Chromium的线程,不需要独立进程)。Crosswalk由组织维护,比个人维护强多了。跟随最新的Chromium不断更新,js等不用担心有函数没法使用。而且不断更新过程中,肯定也会修复以前存在的bug,稳定性也是不用担心的。

最新稳定版Crosswalk基于Chromium38编译。

注:此库也可以配合Cordova(PhoneGap)使用。

OK,感受说完,上教程。

集成到应用中下载zip包,解压后导入。

作者  | 2017-2-21 12:44:35 | 阅读(131) |评论(0) | 阅读全文>>

查看所有日志>>

 
 
 
 
 
 

有道博客搜索

 
 
 
 
 
 
 

四川省 成都市

 发消息  写留言

 
博客等级加载中...
今日访问加载中...
总访问量加载中...
最后登录加载中...
 
 
 
 
 

日志分类

 
 
日志分类列表加载中...
 
 
 
 
 
 
 
模块内容加载中...
 
 
 
 
 
 我要留言
 
 
 
留言列表加载中...
 
 
 
 
 
 
 
博友列表加载中...
 
 
 
 
 

小工具

 
 
模块内容加载中...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017

注册 登录  
 加关注