2010-05-07 7 views
2

저는 C#으로 작성한 기본 프로그램을 사용하여 windows 휴대 전화에서 웹 서버로 GPS 좌표를 보내고 있습니다. 문제는 전화의 데이터 요금제가 매월 4MB 만 허용한다는 것입니다. 10 초마다 위치를 업데이트 할 계획이었습니다.C#에서 웹 서버로 데이터를 전송하는 가장 효율적인 방법은 무엇입니까?

현재 웹 서버의 10 초마다 webrequest를 작성하고 있습니다. 좌표는 URL에 전달되고, PHP 페이지는 데이터베이스에 저장합니다.

요청 당 약 1K 개의 데이터를 생성합니다.이 속도로 하루 안에 데이터 한도에 도달합니다.

더 효율적인 방법이 있습니까?

업데이트 :

나는이 조금 더의 응용 프로그램을 설명 할 필요가있다. 나는 대학에서 일하고 우리는 셔틀에있는 전화를 사용하여 10 초마다 셔틀의 위치를 ​​서버에 전송할 생각을 가지고있었습니다. 그런 다음 학생들이 컴퓨터 나 전화에서 액세스 할 수있는 웹 사이트를 만들어 셔틀 버스가 어디에 있는지 확인하십시오.

이렇게하면 셔틀을 기다리거나 걷기 시작할지 결정할 수 있습니다. 그래서 20 초 업데이트를 할 수는 있지만 그 정도는 될 것입니다. 응용 프로그램은 연중 무휴로 실행되지 않지만 최악의 시나리오는 전화가 끊어지지 않는 경우 사용하고 있습니다.

+2

1K는 전화 서비스 데이터의 최소 측정치입니까? –

+2

데스크톱에 동기화 (블루투스 등) 옵션을 사용하여 데이터를 로컬에 저장하는 방법 (SQL CE 일 수 있음) 및 데스크톱 응용 프로그램에서 데이터를 웹 서버에 업로드하는 방법은 무엇입니까? –

+0

매 10 초마다 과도한 것으로 보입니다. 아마 2 분, 아니면 5 분? 또한 휴대 전화 앱은 다른 휴대 전화 앱과 대역폭을 공유합니다. 4MB는 매우 낮은 한계이며 공유해야 할 수도 있습니다. –

답변

8

사용자가 이전 값에서 특정 거리만큼 이동 한 경우에만 업데이트를 보내는 방법은 무엇입니까?

예를 들어 전화가 침대 옆에 앉아있는 동안 밤에는 10 초마다 같은 좌표를 반복적으로 보내지는 않습니다.

+0

이것은 좋은 지적이지만 하트 비트가 있어야합니다 (예 : 10 분마다 한 번).) 서버가 전화기가 꺼져 있거나 꺼져 있지 않다는 것을 알게됩니다. – egrunin

+0

좋은 지적이지만 서버는 이동하지 않는 사람과 더 이상 네트워크에 연결되지 않은 사람을 구별하지 못합니다. – MusiGenesis

4

1 REQ 10 초마다 = 6 필수/분 = 360 필수/시간 = 8640 필수/일 = ~ 26 만 필수/월

4메가바이트/26 만 ~ =

(15)는 그래서 한도에서 머물 , 서버에 대한 평균 게시물은 15 바이트가되어야합니까? 가능하지 않습니다.

소켓 수준 (어쨌든해야 함)으로 내려 갔다해도 간단한 ping은 84 바이트를 전송하므로 분당 한 번만 사용할 수 있습니다.

+0

그런 식으로 생각하지 않았습니다. 2 배 (위도, 경도)를 넘기면 초기 연결의 오버 헤드를 제외하고 16 바이트가됩니다. – Brian

+0

사실이 아닙니다. 완전한 협조가 아닌 diff 전송을 통해 전송 크기를 줄일 수 있습니다. 처음 위치의 경우 16 바이트, 그 다음 오프셋 2 ~ 4 바이트 인 경우 – Dann

+0

@ burn_hand :하지만 TCP/IP 오버 헤드는 일정하게 유지됩니다. – egrunin

2

SMS (텍스트 메시지)를 사용하여 전화에서 서버로 좌표를 보낼 수 있습니다. 무제한 문자 메시지는 일반적으로 데이터 요금보다 훨씬 저렴합니다.

휴대 전화에서 좌표를 저장하고 10 초마다 한 좌표를 보내는 대신 배치로 보낼 수도 있습니다. GPS 좌표를 두 개의 부동 또는 8 바이트로 저장할 수 있습니다. 매 10 초마다 한 좌표에서 매월 약 2MB가됩니다. 통신 오버 헤드가 데이터 크기에 비해 상대적으로 작아 지도록 배치를 충분히 크게 만들면 4MB 제한을 초과하지 않게됩니다.

웹 서비스는 매우 장황한 SOAP/XML을 사용합니다. 데이터를 바이트 배열로 전송 한 다음 서버의 개별 요소를 압축 해제하는 것이이 문제를 해결하는 가장 좋은 방법입니다.

0

우선 : 나는 매우 빠른 속도로 많은 시간을 보내지 않아 10 초의 시간 간격으로 아주 먼 거리를 비행하지 않을 것이라고 생각합니다. 그래서 더 큰 간격은 좋은 생각입니다.

마지막 위치까지의 거리를 계산할 수있는 로직을 클라이언트에 추가 할 수 있습니다.특정 임계 값 이상인 경우에만 업데이트를 보냅니다. 같은 위치에 있다면 (자택에서, 자고, 하루에 몇 시간 씩) '여기, 위치는 여전히 (거의) 마지막 것과 동일합니다'- 모든 X 분의 데이터가 매우 짧은 메시지를 보낼 수 있습니다. X는 최종 포지션 변경 기간에 따라 증가하는 값입니다. 5 분, 15 분, 30 분, 1 시간 등과 같이 너무 많은 트래픽을 절약 할 수 있으며 위치가 다시 변경되면 전체 GPS 좌표를 즉시 업데이트 할 수 있습니다.

1

전세계 어디에서 사용할 수 있습니까? 어떤 종류의 데이터 요금제가 제공됩니까? 확실한 데이터 계획에 개념을 적용하는 것보다 덜 우스운 데이터 계획을 얻는 것이 더 쉽습니다. 영국에서 500 메가 바이트 - 1GB 모바일 데이터를 사는 곳은 일반 전화 계약 비용보다 월 5 파운드 정도가 듭니다.

+0

저는 미국에 있습니다. 휴대 전화에는 음성 및 문자 메시지가없는 데이터 요금제 만 있습니다. 나는 어제이 작은 데이터 한도에 대해 알아 냈다. 나는 그것이 수백 메가라고 가정했다. 그것은 4MB에 대해 한 달에 10 달러의 비용이 들며, 저에게 ripoff처럼 보입니다. – Brian

+0

@Brian : Verizon의 최하위 데이터 패키지는 25MB 당 10 달러입니다. 당신은 바가지 씌워지고 있지만 엄청난 규모는 아닙니다. 4 for 10은 기존 음성 계획에 추가 기능이없는 경우 정상적인 비용이 될 수도 있습니다. 우리는 (미국) 지금은 격변 적 생태 재해를 제외하고는 다른 모든면에서 훨씬 뒤떨어져 있습니다. – MusiGenesis

관련 문제