udp怎么储存聊天记录,udp如何完成数据传输

hacker|
113

用java,想写一个web聊天的应用,使用session来储存当前用户吗?还是用线程?聊天记录放在哪里?

这个我刚刚研究说。如果信息是实时的,那就复杂了。

简单的说,网页上的实时聊天都是刷出来的,就是客户端不停的提交请求给服务器,看看有没有最新信息。我也是刚开始学,所以性能上好不好我说的不一定对。只是个人看法。

最新的有web socket,据说这个性能上不错,不过我试过了,ie浏览器的支持不好,好像10以后才支持,我测的8不行。火狐用着不错。

先说传统的ajax吧,最笨的实时聊天的 *** 就是定时用ajax刷,也就是5秒钟刷一次,看看服务器里有没有新信息,ajax能给人一种静态刷新的体验,就是网页不用刷新,新内容自己就蹦出来了。但是呢,非常明显,如果用户没在操作就在这挂机呢,或者没有新信息的时候,ajax发送了很多无用的请求。

至于这个推技术,我就看了dwr的推技术。有前辈说这个也是逃脱不了刷这个模式,只不过是封装了一下。具体我没研究。找了个demo自己测了一下。同一个浏览器打开的时候会产生一个session,也就是不管你在一个浏览器上打开多少窗口,你这个sessionid都是唯一的。同一个站点同一浏览器登录多账号,这个需求本身就不合理,这不明摆着让用户开小号呢么。先不说这个了,正题:

在我找的这个demo里,用户身份是用sessionid区分,一对一的会话里,是要把所有session都遍历一遍找到接受者的id,然后给这个页面“推”。这个推你找个例子就明白了,它是可以在java底层里面直接刷页面的。具体怎么实现,都有函数的。页面怎么刷就不用管了,dwr都封装好了。

我也在纠结这个聊天记录放到哪,人人网的聊天是入库的,和留言板是一个功能,只不过聊天的都是悄悄话。像58同城就不是入库的。

我想过用session,但是如果用户很多的话,很占内存,内存溢出了就什么都没了。如果放cookie里,单个站点的cookie有大小限制的,好像是4K(忘了在哪看到的了)。

或者放数据库里吧,如果不想存太多的话就定时清一下。其实也不麻烦的,用户的在线状态你是怎么保存的?我测的时候,如果浏览器关闭,session其实是没清除的。总要定期检查用户是否在线吧,session如何回收还要配置一下。

我想了一个 *** 把聊天窗口写成一个iframe,不过还没实施。

还有用长连接和flash的,不好意思我水平不够,没看懂

怎么在udp java 聊天室中删除聊天记录

客户端是用什么写的?数据有没有存储?

客户端如果是用JAVASE写的,那直接把控件内容设置为空即可;

如果数据有存储,比如存储到数据库,在清空控件内容的同时把数据库数据清除

怎么把收到的UDP数据批量存储到数据库

Transact-SQL 参考

BULK INSERT

以用户指定的格式复制一个数据文件至数据库表或视图中。

语法

BULK INSERT [ [ 'database_name'.][ 'owner' ].]{ 'table_name' FROM 'data_file' }

[ WITH

(

[ BATCHSIZE [ = batch_size ] ]

[ [ , ] CHECK_CONSTRAINTS ]

[ [ , ] CODEPAGE [ = 'ACP' | 'OEM' | 'RAW' | 'code_page' ] ]

[ [ , ] DATAFILETYPE [ =

{ 'char' | 'native'| 'widechar' | 'widenative' } ] ]

[ [ , ] FIELDTERMINATOR [ = 'field_terminator' ] ]

[ [ , ] FIRSTROW [ = first_row ] ]

[ [ , ] FIRE_TRIGGERS ]

[ [ , ] FORMATFILE = 'format_file_path' ]

[ [ , ] KEEPIDENTITY ]

[ [ , ] KEEPNULLS ]

[ [ , ] KILOBYTES_PER_BATCH [ = kilobytes_per_batch ] ]

[ [ , ] LASTROW [ = last_row ] ]

[ [ , ] MAXERRORS [ = max_errors ] ]

[ [ , ] ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) ]

[ [ , ] ROWS_PER_BATCH [ = rows_per_batch ] ]

[ [ , ] ROWTERMINATOR [ = 'row_terminator' ] ]

[ , [ TABLOCK ] ]

)

]

参数

'database_name'

是包含指定表或视图的数据库的名称。如果未指定,则系统默认为当前数据库。

'owner'

是表或视图所有者的名称。当执行大容量复制操作的用户拥有指定的表或视图时,owner 是可选项。如果没有指定 owner 并且执行大容量复制操作的用户不拥有指定的表或视图,则 Microsoft® SQL Server™ 将返回错误信息并取消大容量复制操作。

'table_name'

是大容量复制数据于其中的表或视图的名称。只能使用那些所有的列引用相同基表所在的视图。有关向视图中复制数据的限制的更多信息,请参见 INSERT。

'data_file'

是数据文件的完整路径,该数据文件包含要复制到指定表或视图的数据。BULK INSERT 从磁盘复制数据(包括 *** 、软盘、硬盘等)。

data_file 必须从运行 SQL Server 的服务器指定有效路径。如果 data_file 是远程文件,则请指定通用命名规则 (UNC) 名称。

BATCHSIZE [ = batch_size ]

指定批处理中的行数。每个批处理作为一个事务复制至服务器。SQL Server提交或回滚(在失败时)每个批处理的事务。默认情况下,指定数据文件中的所有数据是一个批处理。

CHECK_CONSTRAINTS

指定在大容量复制操作中检查 table_name 的任何约束。默认情况下,将会忽略约束。

CODEPAGE [ = 'ACP' | 'OEM' | 'RAW' | 'code_page' ]

指定该数据文件中数据的代码页。仅当数据含有字符值大于 127 或小于 32 的 char、varchar 或 text 列时,CODEPAGE 才是适用的。

CODEPAGE 值 描述

ACP char、varchar 或 text 数据类型的列从 ANSI/Microsoft Windows® 代码页 ISO 1252 转换为 SQL Server 代码页。

OEM(默认值) char、varchar 或 text 数据类型的列被从系统 OEM 代码页转换为 SQL Server 代码页。

RAW 并不进行从一个代码页到另一个代码页的转换;这是最快的选项。

code_page 特定的代码页号码,例如 850。

DATAFILETYPE [ = {'char' | 'native' | 'widechar' | 'widenative' } ]

指定 BULK INSERT 使用指定的默认值执行复制操作。

DATAFILETYPE 值 描述

char(默认值) 从含有字符数据的数据文件执行大容量复制操作。

native 使用 native(数据库)数据类型执行大容量复制操作。要装载的数据文件由大容量复制数据创建,该复制是用 bcp 实用工具从 SQL Server 进行的。

widechar 从含有 Unicode 字符的数据文件中执行大容量复制操作。

widenative 执行与 native 相同的大容量复制操作,不同之处是 char、varchar 和 text 列在数据文件中存储为 Unicode。要装载的数据文件由大容量复制数据创建,该复制是用 bcp 实用工具从 SQL Server 进行的。该选项是对 widechar 选项的一个更高性能的替代,并且它用于使用数据文件从一个运行 SQL Server 的计算机向另一个计算机传送数据。当传送含有 ANSI 扩展字符的数据时,使用该选项以便利用 native 模式的性能。

FIELDTERMINATOR [ = 'field_terminator' ]

指定用于 char 和 widechar 数据文件的字段终止符。默认的字段终止符是 \t(制表符)。

FIRSTROW [ = first_row ]

指定要复制的之一行的行号。默认值是 1,表示在指定数据文件的之一行。

FIRE_TRIGGERS

指定目的表中定义的任何插入触发器将在大容量复制操作过程中执行。如果没有指定 FIRE_TRIGGERS,将不执行任何插入触发器。

FORMATFILE [ = 'format_file_path' ]

指定一个格式文件的完整路径。格式文件描述了含有存储响应的数据文件,这些存储响应是使用 bcp 实用工具在相同的表或视图中创建的。格式文件应该用于以下情况:

数据文件含有比表或视图更多或更少的列。

列使用不同的顺序。

列分割符发生变化。

数据格式有其它的改变。通常,格式文件通过 bcp 实用工具创建并且根据需要用文本编辑器修改。有关更多信息,请参见 bcp 实用工具。

KEEPIDENTITY

指定标识列的值存在于导入文件中。如果没有指定 KEEPIDENTITY,在导入的数据文件中此列的标识值将被忽略,并且 SQL Server 将根据表创建时指定的种子值和增量值自动赋给一个唯一的值。假如数据文件不含该表或视图中的标识列,使用一个格式文件来指定在导入数据时,表或视图中的标识列应被忽略;SQL Server 自动为此列赋予唯一的值。有关详细信息,请参见 DBCC CHECKIDENT。

KEEPNULLS

指定在大容量复制操作中空列应保留一个空值,而不是对插入的列赋予默认值。

KILOBYTES_PER_BATCH [ = kilobytes_per_batch ]

指定每个批处理中数据的近似千字节数(KB)。默认情况下,KILOBYTES_PER_BATCH 未知。

LASTROW [ = last_row ]

指定要复制的最后一行的行号。默认值是 0,表示指定数据文件中的最后一行。

MAXERRORS [ = max_errors ]

指定在大容量复制操作取消之前可能产生的错误的更大数目。不能被大容量复制操作导入的每一行将被忽略并且被计为一次错误。如果没有指定 max_errors,默认值为 0。

ORDER ( { column [ ASC | DESC ] } [ ,...n ] )

指定数据文件中的数据如何排序。如果装载的数据根据表中的聚集索引进行排序,则可以提高大容量复制操作的性能。如果数据文件基于不同的顺序排序,或表中没有聚集索引,ORDER 子句将被忽略。给出的列名必须是目的表中有效的列。默认情况下,大容量插入操作假设数据文件未排序。

n

是表示可以指定多列的占位符。

ROWS_PER_BATCH [ = rows_per_batch ]

指定每一批处理数据的行数(即 rows_per_bacth)。当没有指定 BATCHSIZE 时使用,导致整个数据文件作为单个事务发送给服务器。服务器根据 rows_per_batch 优化大容量装载。默认情况下,ROWS_PER_BATCH 未知。

ROWTERMINATOR [ = 'row_terminator' ]

指定对于 char 和 widechar 数据文件要使用的行终止符。默认值是 \n(换行符)。

TABLOCK

指定对于大容量复制操作期间获取一个表级锁。如果表没有索引并且指定了 TABLOCK,则该表可以同时由多个客户端装载。默认情况下,锁定行为是由表选项 table lock on bulk load 决定的。只在大容量复制操作期间控制锁会减少表上的锁争夺,极大地提高性能。

注释

BULK INSERT 语句能在用户定义事务中执行。对于一个用 BULK INSERT 语句和 BATCHSIZE 子句将数据装载到使用多个批处理的表或视图中的用户定义事务来说,回滚它将回滚所有发送给 SQL Server 的批处理。

权限

只有 sysadmin 和 bulkadmin 固定服务器角色成员才能执行 BULK INSERT。

示例

本例从指定的数据文件中导入订单详细信息,该文件使用竖杠 (|) 字符作为字段终止符,使用 |\n 作为行终止符。

BULK INSERT Northwind.dbo.[Order Details]

FROM 'f:\orders\lineitem.tbl'

WITH

(

FIELDTERMINATOR = '|',

ROWTERMINATOR = '|\n'

)

本例指定 FIRE_TRIGGERS 参数。

BULK INSERT Northwind.dbo.[Order Details]

FROM 'f:\orders\lineitem.tbl'

WITH

(

FIELDTERMINATOR = '|',

ROWTERMINATOR = ':\n',

FIRE_TRIGGERS

)

请参见

bcp 实用工具

排序规则

在不同排序规则间复制数据

使用 bcp 和 BULK INSERT

并行数据装载

sp_tableoption

怎么写udp接收服务器连续发来的信息,并把信息存储在数据库里

Transact-SQL 参考

BULK INSERT

以用户指定的格式复制一个数据文件至数据库表或视图中。

语法

BULK INSERT [ [ 'database_name'.][ 'owner' ].]{ 'table_name' FROM 'data_file' }

[ WITH

(

[ BATCHSIZE [ = batch_size ] ]

[ [ , ] CHECK_CONSTRAINTS ]

[ [ , ] CODEPAGE [ = 'ACP' | 'OEM' | 'RAW' | 'code_page' ] ]

[ [ , ] DATAFILETYPE [ =

{ 'char' | 'native'| 'widechar' | 'widenative' } ] ]

[ [ , ] FIELDTERMINATOR [ = 'field_terminator' ] ]

[ [ , ] FIRSTROW [ = first_row ] ]

[ [ , ] FIRE_TRIGGERS ]

[ [ , ] FORMATFILE = 'format_file_path' ]

[ [ , ] KEEPIDENTITY ]

[ [ , ] KEEPNULLS ]

[ [ , ] KILOBYTES_PER_BATCH [ = kilobytes_per_batch ] ]

[ [ , ] LASTROW [ = last_row ] ]

[ [ , ] MAXERRORS [ = max_errors ] ]

[ [ , ] ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) ]

[ [ , ] ROWS_PER_BATCH [ = rows_per_batch ] ]

[ [ , ] ROWTERMINATOR [ = 'row_terminator' ] ]

[ , [ TABLOCK ] ]

)

]

5条大神的评论

  • avatar
    访客 2022-10-09 上午 04:43:41

    enative' } ] ][ [ , ] FIELDTERMINATOR [ = 'field_terminator' ] ][ [ , ] FIRSTROW [ = first_row ] ][ [ ,

  • avatar
    访客 2022-10-09 上午 03:04:25

    类型的列从 ANSI/Microsoft Windows® 代码页 ISO 1252 转换为 SQL Server 代码页。 OEM(默认值) char、varchar 或 text 数据类型的列被从系统 OEM 代码页转换为 SQL Server 代码页。 RAW 并不进行从一个代

  • avatar
    访客 2022-10-09 上午 04:12:37

    复制操作过程中执行。如果没有指定 FIRE_TRIGGERS,将不执行任何插入触发器。FORMATFILE [ = 'format_file_path' ]指定一个格式文件的完整路径。格式文件描

  • avatar
    访客 2022-10-09 上午 01:50:52

    [ = 'row_terminator' ] ][ , [ TABLOCK ] ])] 参数'database_name'是包含指定表或视图的数据库的名称。如果未指定,则系统默认为

  • avatar
    访客 2022-10-08 下午 09:33:06

    ors,默认值为 0。ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) 指定数据文件中的数据如何排序。如果装载的数据根据表中的聚集索引进行排序,则可以提高大

发表评论